Ich habe derzeit eine Combobox
in einer Datatemplate
für eine Listbox
. Ich habe die Combobox
an eine string[]
gebunden. Das funktioniert gut.ListBox mit ComboBox DataTemplate Bindung
Was ich möchte ist, wenn eine Combobox
geändert wird, sollte der Index der Listbox
mit der Zeichenfolge im Array verknüpft werden. I.e. wenn ich den 4. Artikel in der Combobox
in der 3. Zeile der Listbox
wählen, sollten meine Daten durch < string (Combobox
string), int (Listbox
Index)> aber um doppelte Daten zu speichern, möchte ich diese Daten als meine verwenden Combobox
Bindung.
Ich dachte ich ein Schlüsselwertpaar verwenden könnte, aber ich bin nicht sicher, wie ich dies auf die Combobox
binden würde, die in einem DataTemplate
ist (oder, wenn dies der beste Weg, dies zu tun).
Hinweis
Offensichtlich bedeutet dies, dass jede Combobox
Zeichenfolge nur mit einem Listbox
Index zu einer Zeit zugeordnet werden kann. Deshalb möchte ich, wenn jede Combobox
Zeichenfolge nur einmal in der Listbox
eingestellt werden könnte, das heißt, wenn ich Combobox
Index 3 in Index 4 des Listbox
dann Listbox
Index 5 auszuwählen, die bereits hatte Combobox
3 sollte leer zurückgesetzt werden. Ich werde wahrscheinlich in das Combobox
geänderte Ereignis gehen und das andere Comboboxes
zurücksetzen, wenn es für die gleiche Zeichenfolge ist.
Probe
OK, so dass die folgende Bindung Werke;
<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));
}