2012-01-26 16 views
2

動的に作成されたコントロールに値をバインドする際に問題があります。ユーザーがカスタムファイルを読み込んだとき、そのファイルには未知数の引数があります。引数には、グループ化されたときにtabItemをtabControlに動的に追加するGroupプロパティがあります。引き続き引数をループしてラベルを追加し、タブ内のグリッドにテキストボックスを追加します。しかし、私は、アーストのタイプに応じて異なるコントロールを使用するつもりです。私は引数Valueプロパティをテキストボックスにバインドします。タブ、ラベル、テキストボックスは上手く追加されていますが、値の束縛はありません。動的に作成されたコントロールへのバインド

私はまだこれを再考していないソリューションです。

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);  
} 
+0

私は 'viewModel.Arguments [argument.Name] .Value'が有効なプロパティであると仮定しますか?コードビハインドの代わりにXAMLからコントロールを生成するために 'ItemsControl'のようなものを使用してみませんか? – Rachel

+0

viewModel.Arguments [argument.Name] .Valueは有効なプロパティです。 – theHaggis

+0

ビューがデータにバインドしようとしたときに見つけることができますか? – Rachel

答えて

1
textBox.SetBinding(TextBlock.TextProperty, binding); 

はインテリセンスに依存オーバーほんの少し

textBox.SetBinding(TextBox.TextProperty, binding); 

されている必要があります。

関連する問題