开发者

Set a binding programmatically between a component and a value from a list

I'm developing a application in Silverlight 3 and I have a dynamic form, I generate this form from a list of attributes (key-value) I'd like to know, how can I set a binding between the component (CheckBox, TextBox, ...) and the value of the attribute?

This code is only the first approximation to the solution, no the definitive code:

    int numeroFila = 0;
    MainPage rootPage = ((App)Application.Current).开发者_开发百科RootVisual as MainPage;
    rootPage.NuevoElementoWindowInstance.NuevoElementoInstance.ListadoAtributos.Children.Clear();

    foreach (var atributo in ListaAtributos)
    {
        string tipoAtributo = ObtenerDefinicionAtributo(atributo.Key);
        FrameworkElement campoDatos;
        TextBlock bloqueTexto = new TextBlock();
        bloqueTexto.Text = atributo.Key;
        bloqueTexto.Margin = new Thickness(10,3,0,0);

        switch (tipoAtributo)
        {
            case "Boolean":

                CheckBox campoBooleano = new CheckBox();
                campoBooleano.Name = atributo.Key;
                campoBooleano.IsChecked = ObtenerValorCampoBooleano(atributo.Value);
                campoDatos = campoBooleano;
                break;

            case "DateTime":

                DatePicker campoFecha = new DatePicker();
                try
                {
                    campoFecha.DisplayDate = DateTime.Parse(atributo.Value);
                }
                catch (Exception) 
                {
                    campoFecha.DisplayDate = DateTime.Now;
                }
                campoDatos = campoFecha;
                break;

            default:

                TextBox campoTexto = new TextBox();
                campoTexto.Text = atributo.Value == null ? "" : atributo.Value;
                campoDatos = campoTexto;
                break;
        }

        campoDatos.Margin = new Thickness(0,1,10,1);
        rootPage.NuevoElementoWindowInstance.NuevoElementoInstance.ListadoAtributos.RowDefinitions.Add(new RowDefinition());
        Grid.SetColumn(campoDatos, 1);
        Grid.SetColumn(bloqueTexto, 0);
        Grid.SetRow(campoDatos, numeroFila);
        Grid.SetRow(bloqueTexto, numeroFila);
        rootPage.NuevoElementoWindowInstance.NuevoElementoInstance.ListadoAtributos.Children.Add(bloqueTexto);
        rootPage.NuevoElementoWindowInstance.NuevoElementoInstance.ListadoAtributos.Children.Add(campoDatos);
        numeroFila++;
    }
}


I have found the solution. This is the code:

        int numeroFila = 0;
        MainPage rootPage = ((App)Application.Current).RootVisual as MainPage;
        rootPage.NuevoElementoWindowInstance.NuevoElementoInstance.ListadoAtributos.Children.Clear();

        foreach (var atributo in ListaAtributos)
        {
            string tipoAtributo = ObtenerDefinicionAtributo(atributo.Key);
            FrameworkElement campoDatos;
            TextBlock bloqueTexto = new TextBlock();
            bloqueTexto.Margin = new Thickness(10,3,0,0);
            Binding bind = new Binding();
            bind.Source = atributo;
            bind.Path = new PropertyPath("Key");
            bind.Mode = System.Windows.Data.BindingMode.TwoWay;
            bloqueTexto.SetBinding(TextBlock.TextProperty, bind);


            switch (tipoAtributo)
            {
                case "Boolean":

                    CheckBox campoBooleano = new CheckBox();
                    campoBooleano.Name = atributo.Key;
                    campoBooleano.IsChecked = ObtenerValorCampoBooleano(atributo.Value);
                    bind = new Binding();
                    bind.Source = atributo;
                    bind.Path = new PropertyPath("Value");
                    bind.Mode = System.Windows.Data.BindingMode.TwoWay;
                    campoBooleano.SetBinding(CheckBox.IsCheckedProperty, bind);
                    campoDatos = campoBooleano;
                    break;

                case "DateTime":

                    DatePicker campoFecha = new DatePicker();
                    try
                    {
                        campoFecha.DisplayDate = DateTime.Parse(atributo.Value);
                    }
                    catch (Exception) 
                    {
                        campoFecha.DisplayDate = DateTime.Now;
                    }
                    bind = new Binding();
                    bind.Source = atributo;
                    bind.Path = new PropertyPath("Value");
                    bind.Mode = System.Windows.Data.BindingMode.TwoWay;
                    campoFecha.SetBinding(DatePicker.TextProperty, bind);
                    campoDatos = campoFecha;
                    break;

                default:

                    TextBox campoTexto = new TextBox();
                    atributo.Value = atributo.Value == null ? "" : atributo.Value;
                    bind = new Binding();
                    bind.Source = atributo;
                    bind.Path = new PropertyPath("Value");
                    bind.Mode = System.Windows.Data.BindingMode.TwoWay;
                    campoTexto.SetBinding(TextBox.TextProperty, bind);
                    campoDatos = campoTexto;
                    break;
            }

            //this.GetType().GetProperty("").GetGetMethod().Invoke(new Object(), null);

            campoDatos.Margin = new Thickness(0,1,10,1);
            rootPage.NuevoElementoWindowInstance.NuevoElementoInstance.ListadoAtributos.RowDefinitions.Add(new RowDefinition());
            Grid.SetColumn(campoDatos, 1);
            Grid.SetColumn(bloqueTexto, 0);
            Grid.SetRow(campoDatos, numeroFila);
            Grid.SetRow(bloqueTexto, numeroFila);
            rootPage.NuevoElementoWindowInstance.NuevoElementoInstance.ListadoAtributos.Children.Add(bloqueTexto);
            rootPage.NuevoElementoWindowInstance.NuevoElementoInstance.ListadoAtributos.Children.Add(campoDatos);
            numeroFila++;
        }

However now, I need to set a Converter to the CheckBox, because al "Values" are string and I need to convert string-boolean

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜