Контекстное меню WPF и ListView - PullRequest
       12

Контекстное меню WPF и ListView

5 голосов
/ 12 февраля 2010

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

У меня есть просмотр списка, он привязан к наблюдаемой коллекции объектов для отображения. Я хочу иметь контекстное меню с кучей опций. Параметры в контекстном меню относятся к конкретному объекту в списке, по которому щелкнули (такие как удаление, экспорт и т. Д.).

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

Как мне это сделать?

Редактировать: я должен упомянуть, что я бы предпочел решение, которое в основном (если не полностью) xaml - я пытаюсь избежать значительного кода в коде позади. Если это единственный способ сделать это ...

Дальнейшее редактирование : Важные подробности, которые я забыл упомянуть. Команда, которую я хочу выполнить, относится к объекту, связанному с контекстом данных моего пользовательского элемента управления, а не к объектам в представлении списка. Поэтому мне нужно, чтобы контекстное меню в элементах представления списка было привязано к команде, находящейся в контексте данных пользовательского элемента управления, и элемент списка был передан в качестве параметра в эту команду.

1 Ответ

4 голосов
/ 13 февраля 2010

Это зависит от того, является ли ваш ContextMenu частью шаблона для отдельных элементов, или он присоединен к ListBox в целом.

Если вы присоединяете ваш ContextMenu к элементам в списке с помощью DataTemplate (как правило, это лучший способ сделать это), DataContext на MenuItem уже установлен, поэтому все, что вам нужно сделать это:

<MenuItem ... CommandParameter="{Binding}" />

С другой стороны, если ваш ContextMenu присоединен к ListBox в целом, вам необходимо получить доступ к свойству SelectedItem ListBox:

<MenuItem ... CommandParameter="{Binding SelectedItem, RelativeSource={RelativeSource FindAncestor,ListBox,1}} />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...