theHaggis
theHaggis

Reputation: 645

Binding to dynamically created controls

I'm having trouble binding values to dynamically created controls. When a user loads a custom file and that file will have a unknown number of arguments. Arguments have a Group property that when grouped will dynamically add tabItems to a tabControl. I then loop through the arguments and add a label and, for now, a textbox to a grid inside the tabs. though i intend to use different controls depending on the arument type. I want to bind the argument Value property to the textbox. The tabs, labels and textboxes are added fine but, no value binding

He if my not yet re-factored solution so far;

    myTab.Items.Clear();

    var args = viewModel.Arguments;
    var groups = args.GroupBy(arg => arg.Groups);

foreach (var group in groups)
{
    TabItemExt tab = new TabItemExt();
    tab.Header = group.Key;

    Grid grid = new Grid();

    grid.ColumnDefinitions.Add(new ColumnDefinition());
    grid.ColumnDefinitions.Add(new ColumnDefinition());

    int count = 0;
    foreach (var argument in group)
    {
        RowDefinition newRow = new RowDefinition();
        grid.RowDefinitions.Insert(count, newRow);

        LabelTextBlock label = new LabelTextBlock();
        label.Text = argument.DisplayName;

        Grid.SetRow(label, count);
        Grid.SetColumn(label, 0);

        TextBox textBox = new TextBox();
        var binding = new Binding();
        binding.Source = viewModel.Arguments[argument.Name];
        //binding.Source = argument
        binding.Path = new PropertyPath("Value");

        textBox.SetBinding(TextBlock.TextProperty, binding);

        Grid.SetRow(textBox, count);
        Grid.SetColumn(textBox, 1);

        grid.Children.Add(label);
        grid.Children.Add(textBox);
        count += 1; 
    }

    tab.Content = grid;
    myTab.Items.Add(tab);    
}

Upvotes: 2

Views: 4105

Answers (1)

theHaggis
theHaggis

Reputation: 645

textBox.SetBinding(TextBlock.TextProperty, binding);

should have been

textBox.SetBinding(TextBox.TextProperty, binding);

just a little over dependent on intellisense.

Upvotes: 1

Related Questions