В моем файле XAML у меня есть DataGrid с контекстным меню. Источником данных является ViewModel, который имеет свойство EntityCollection
(ObservableCollection) в качестве ItemsSource для DataGrid и другую коллекцию ContextMenu.MenuItems
, которая служит источником данных для создания контекстного меню в DataGrid. Элементы этой коллекции имеют свойство Command
, которое я связываю со свойством Command пунктов меню:
<DataGrid Name="EntityDataGrid" ItemsSource="{Binding EntityCollection}" Height="450">
<DataGrid.ContextMenu>
<ContextMenu ItemsSource="{Binding Path=ContextMenu.MenuItems}">
<ContextMenu.ItemContainerStyle>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Command" Value="{Binding Command}" />
<Setter Property="CommandParameter"
Value="{Binding ElementName=EntityDataGrid, Path=SelectedItems}" />
</Style>
</ContextMenu.ItemContainerStyle>
</ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>
Действие для команды пункта меню имеет следующую подпись во ViewModel:
private void SelectedItemsAction(object parameter)
{
// Do something with "parameter"
}
Теперь моя проблема в том, что я достигаю SelectedItemsAction
, когда нажимаю на элемент контекстного меню, но parameter
- это null
. Я считаю, что моя проблема в установщике для свойства CommandParameter
. Как видите, я хочу связать это свойство со свойством SelectedItems
DataGrid, установив значение:
<Setter Property="CommandParameter"
Value="{Binding ElementName=EntityDataGrid, Path=SelectedItems}" />
В качестве теста я пробовал более простые значения:
<Setter Property="CommandParameter"
Value="{Binding ElementName=EntityDataGrid, Path=Height}" />
Здесь parameter
по-прежнему null
. А потом просто проверить, достигает ли какой-либо параметр моего метода действия вообще:
<Setter Property="CommandParameter"
Value="10" />
Это работает, parameter
в моем методе действия теперь действительно 10
.
Что я делаю неправильно, чтобы связать значение CommandParameter
со свойством EntityDataGrid
? Возможно ли это вообще?
Заранее спасибо за помощь!