【发布时间】:2020-07-12 10:51:35
【问题描述】:
我有一个 ListView 和 Expanders。每个Expander(代表一个数据库表)下都有项目,在另一个ListView 中。我想右键单击并在最里面的项目上有一个“编辑”选项,这些项目代表相应数据库表中的记录。
在我的MainEditorViewModel 中有一个名为“编辑”的ICommand。该命令所在的Datacontext与最外层的ListView名为“TestGroupsListView”的Datacontext相同
这是扩展器 ListView 的 XAML 标记。我为通过ElementName 为MenuItem 的Binding 绑定引用而命名的最外层ListView:
<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>
我能够成功地将 DataTemplate 中的按钮绑定到“编辑”,但是当我尝试将 MenuItem 的 Command 绑定到“编辑”时,什么也没有发生。为什么这可能是按钮命令绑定使用 ElementName 工作,但 ContextMenu 中的相同绑定不工作?
【问题讨论】:
标签: wpf listview mvvm data-binding binding