MVVM Set MenuItem's DataContext
本文关键字:DataContext Set MenuItem MVVM | 更新日期: 2023-09-27 17:49:45
我有一个ListView的ItemSource从字符串的列表。现在我已经添加了一个上下文菜单,它应该只是实现一些命令。但问题在于如何设置DataContext。找到了一些解决方案,但都不适合我。我不知道我的错在哪里。
这里是我的XAML代码,减少到重要的区域。
<ListView x:Name="lstBackups" ItemsSource="{Binding SelectedClient.Backups}">
<ListView.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="Do Something" DataContext="{Binding RelativeSource={RelativeSource AncestorType=ContextMenu}}"
cinch:SingleEventCommand.RoutedEventName="MouseLeftButtonUp"
cinch:SingleEventCommand.TheCommandToRun="{Binding Path=DataContext.OpenBackupInExplorerCommand, ElementName=UserControl}">
</MenuItem>
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
</ListView>
我相信你已经注意到,上下文菜单是不是同一可视树的一部分作为你的用户控件(恼人的我知道)。所以你必须在你的绑定逻辑上有一点创造性。
尝试将命令绑定更改为以下
cinch:SingleEventCommand.TheCommandToRun="{BindingPath=PlacementTarget.DataContext.OpenBackupInExplorerCommand,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type ContextMenu}}}"
应该尝试获取放置目标的DataContext(在你的例子中是ListView),它应该继承UserControl的DataContext