У меня есть ListView
из Expander
с. Каждый Expander
(представляющий таблицу базы данных) будет иметь элементы под ним, в другом ListView
. Я хочу щелкнуть правой кнопкой мыши и выбрать опцию «Изменить» для самых внутренних элементов, которые представляют записи в соответствующей таблице базы данных.
В моем MainEditorViewModel
есть ICommand
с именем 'Edit'. Текст Datacontext, в котором находится эта команда, такой же, как у самого внешнего ListView
с именем "TestGroupsListView"
Вот разметка XAML для ListView Expanders. Самый внешний ListView, который я назвал для ссылки в привязке через ElementName
для MenuItem
s Binding
:
<ListView Name="TestGroupsListView" ItemsSource="{Binding TestGroups}" Grid.Row="1">
<ListView.ItemTemplate>
<DataTemplate>
<Expander Style="{StaticResource MaterialDesignExpander}" >
<Expander.Header>
<Grid MaxHeight="50">
<TextBlock Text="{Binding Name}"/>
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Header="Add..." Command="{Binding Add}"/>
</ContextMenu>
</Grid.ContextMenu>
</Grid>
</Expander.Header>
<ListView ItemsSource="{Binding Records}" Style="{StaticResource MaterialDesignListView}" Margin="30 0 0 0">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Header="Edit"
Command="{Binding ElementName=TestGroupsListView, Path=DataContext.Edit}"
CommandParameter="{Binding }"/>
</ContextMenu>
</Grid.ContextMenu>
<Button Content="{Binding RecordName}" Command="{Binding ElementName=TestGroupsListView, Path=DataContext.Edit}"/>
<!--<TextBlock Text="{Binding RecordName}" AllowDrop="True"/>-->
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Expander>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Я могу привязать кнопку в шаблоне данных к «Редактировать» успешно, но когда я пытаюсь связать MenuItem
'Command
с «Редактировать», ничего не происходит. Почему это может быть связано с тем, что привязка команды кнопки работает с использованием ElementName
, а такая же привязка в ContextMenu
- нет?