Несколько ListBox, привязывающих свой SelectedItem к одному и тому же свойству в ViewModel - лучше? - PullRequest
0 голосов
/ 04 марта 2010

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

Когда я щелкаю правой кнопкой мыши ListBox, я создаю контекстное меню, где каждый элемент имеет DelegateCommand. В настоящее время я устанавливаю параметр команды для свойства SelectedListBox на самой модели представления страницы, поскольку моей команде делегата необходимо знать, какой элемент ListBox был нажат правой кнопкой мыши.

Однако это приводит к странному поведению, которое, как я предполагаю, связано с тем, что я привязываю несколько списков ListBox к одному свойству уровня страницы (SelectedListBox).

Соответствующий XAML для шаблона ячейки для просмотра списка выглядит следующим образом:

<DataTemplate x:Key="MultipleListBoxCellTemplate">
    <ListBox SelectedItem="{Binding Path=DataContext.SelectedListBox, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Page}}}" />
</DataTemplate>

Есть ли лучший способ узнать, какой ListBox щелкнул правой кнопкой мыши по моей модели представления, или кто-нибудь может придумать другой подход? Очень ценится:)

1 Ответ

0 голосов
/ 04 марта 2010

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

Кроме того, вы можете обойти проблему с помощью SelectedItem, изменив привязку к OneWayToSource, чтобыданные только перетекают из View обратно в ViewModel.У вас все еще могут быть проблемы с синхронизацией, которые, как я подозреваю, являются вашей текущей проблемой, но в зависимости от того, что происходит, могут решить ее.

...