В моем 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? Возможно ли вообще?
Благодарим вас за помощь!