2017-07-19 9 views
0

Listboxの場合は、が現在Datatemplateにあります。 Comboboxstring[]にバインドしました。これはうまくいきます。ComboBox DataTemplateをバインドしたリストボックス

Comboboxが変更された場合、Listboxのインデックスは配列内の文字列に関連付けられます。 I. Listboxの3行目のComboboxの4番目の項目を選択すると、<文字列(Combobox文字列)、int(Listboxインデックス)で表されるはずですが、重複したデータを保存するためにこのデータをCombobox結合。

私は鍵の値のペアを使用できると思っていましたが、DataTemplateにあるComboboxにこれをバインドする方法がわかりません(またはこれが最良の方法です)。

は明らかにこれは、各Combobox文字列は一度に1つのListboxインデックスに関連付けることができることを意味します。 IはすでにCombobox 3がブランクにリセットされるべきであったListbox次いでListboxインデックス5、インデックス4にComboboxインデックス3を選択した場合、各Combobox文字列は一度だけListbox、すなわち設定することができればそのため、私はたいです。私はおそらくCombobox変更されたイベントを通過し、同じ文字列の場合は他のComboboxesをリセットします。

サンプル

OK以下の結合作品そう。

<Window.Resources> 
    <DataTemplate x:Key="lbxHeaderDataTemplate"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="1.5*"></ColumnDefinition> 
       <ColumnDefinition Width="*"></ColumnDefinition> 
      </Grid.ColumnDefinitions> 
      <Label Content="{Binding Item1}"></Label> 
      <ComboBox Name="cbxTest" Grid.Column="1" ItemsSource="{Binding 
       Item2}" DisplayMemberPath="Key"></ComboBox> 
     </Grid> 
    </DataTemplate> 

</Window.Resources> 
<StackPanel Width="auto" Height="auto"> 
    <ListBox Name="lbxFields" 
      ItemTemplate="{DynamicResource lbxHeaderDataTemplate}" 
      HorizontalContentAlignment="Stretch"> 
    </ListBox> 
</StackPanel> 

C#

private List<KeyValuePair<string, int>> cbxOptions2 = new List<KeyValuePair<string, int>>(); 
cbxOptions2.Add(new KeyValuePair<string, int>("", 0)); 
cbxOptions2.Add(new KeyValuePair<string, int>("Identifier", 0)); 
cbxOptions2.Add(new KeyValuePair<string, int>("Family Identifier", 0)); 
cbxOptions2.Add(new KeyValuePair<string, int>("File Path", 0)); 
for (int i = 0; i < 10; i++) 
{ 
    lbxDatFields.Items.Add(new Tuple<string, List<KeyValuePair<string, int>>>((i * 10).ToString(), cbxOptions2)); 
} 

答えて

0

これは私が使用して終了したものでした。お気軽にもっと良い答えを提案してください。

<Window.Resources> 
    <DataTemplate x:Key="lbxHeaderDataTemplate"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="1.5*"></ColumnDefinition> 
       <ColumnDefinition Width="*"></ColumnDefinition> 
      </Grid.ColumnDefinitions> 
      <Label Content="{Binding Item1}"></Label> 
      <ComboBox Name="cbxTest" Grid.Column="1" ItemsSource="{Binding 
       Item2}" DisplayMemberPath="Key" 
       SelectionChanged="cbxTest_SelectionChanged"></ComboBox> 
     </Grid> 
    </DataTemplate> 

</Window.Resources> 
<StackPanel Width="auto" Height="auto"> 
    <ListBox Name="lbxFields" 
      ItemTemplate="{DynamicResource lbxHeaderDataTemplate}" 
      HorizontalContentAlignment="Stretch"> 
    </ListBox> 
</StackPanel> 

C#

private Dictionary<string, int> cbxOptions2 = new Dictionary<string, int>(); 
cbxOptions2.Add("", 0); 
cbxOptions2.Add("Identifier", 0); 
cbxOptions2.Add("Family Identifier", 0); 
cbxOptions2.Add("File Path", 0); 
for (int i = 0; i < 10; i++) 
{ 
    lbxDatFields.Items.Add(new Tuple<string, Dictionary<string, int>>((i * 10).ToString(), cbxOptions2)); 
} 

private void cbxTest_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    ComboBox test = (ComboBox)sender; 
    DependencyObject parent = VisualTreeHelper.GetParent(test); 
    Label currentTxt = null; 
    foreach (object o in ((Grid)parent).Children) 
    { 
     if (o is Label) 
     { 
      currentTxt = (Label)o; 
     } 
    } 
} 
関連する問題