WPF Listbox - изменить источник элементов управления в табличке данных - PullRequest
0 голосов
/ 11 сентября 2009

У меня есть список с табличкой данных, которая содержит несколько элементов управления, связанных с моей коллекцией.

Я хочу изменить источник предметов для одного из этих списков, в зависимости от значения, выбранного в одном из других списков в той же строке. Я не хочу изменять источник данных для всех соответствующих выпадающих списков в остальных строках списка.

Как получить дескриптор элемента управления только в выбранной строке.

Это легче попробовать с сеткой данных WPF?

Спасибо.

Ответы [ 2 ]

1 голос
/ 11 сентября 2009

Это на самом деле проще с ListBox, так как DataTemplate определяет все элементы управления для строки.

Я думаю, что самый простой способ - использовать конвертер для привязки. Вы будете привязывать ваш второй ресурс ComboBox ItemsSource к SelectedItem первого ComboBox:

<myNamespace:MyConverter x:Key="sourceConverter" />

<StackPanel Orientation="Horizontal>
    <ComboBox x:Name="cbo1" ... />
    ...
    <ComboBox ItemsSource="{Binding SelectedItem, ElementName=cbo1, Converter={StaticResource sourceConverter}}" ... />
    ...
</StackPanel>

Обратите внимание, что если вам нужна дополнительная информация из DataContext строки, вы можете сделать это MultiBinding и IMultiValueConverter и легко передать DataContext, выполнив:

<MultiBinding Converter="{StaticResource sourceConverter}">
    <Binding />
    <Binding Path="SelectedItem", ElementName="cbo1" />
</MultiBinding>

Затем, в вашем классе конвертера, сделайте все, что вам нужно, чтобы получить правильный источник предметов.

0 голосов
/ 11 сентября 2009

Получите событие SelectionChanged этого патокулярного комбо-ящика и установите внутри него источник ресурсов другого комбо-бокса.

private void cmb1SelectionChanged(object sender, SelectionChangedEventArgs e)
{
  cmboBox2.ItemSource = yourItemSource;
}

Также лучше получить событие SelectionChaged списка и обработать его.

 private void OnlistviewSelectionChanged( object sender, SelectionChangedEventArgs e )
 {
    // Handles the selection changed event so that it will not reflect to other user controls.
    e.Handled = true;
 }
...