如何解决WPF +绑定命令和使用MVVM的上下文菜单项的标题
|| 我创建了WPF应用程序,并遵循MVVM模式。我的xaml中有一个上下文菜单,我需要绑定命令和Header文本。使用以下代码,我可以将上下文菜单的标题与\“ MenuItemName \”绑定在一起,该\“ MenuItemName \”是BOList中的一个属性,该属性是一个可观察的集合。我的问题是命令没有被触发?我将上下文菜单的项目源更改为datacontext(DataContext=\"{Binding Path=PlacementTarget.Tag,RelativeSource={RelativeSource Self}}\")
命令工作正常,但我的标题为空。有没有办法绑定我的标题和菜单项的命令?这里的命令MenuClick是VM中的Icommand属性,而MenuItemName是BOList内的属性,BOList是绑定到我的ListBox的可观察集合。
<Grid>
<StackPanel Orientation=\"Vertical\">
<Button x:Name=\"btnClickMe\" Command=\"{Binding ButtonCommand}\" Content=\"Click Me\" />
<ListBox ItemsSource=\"{Binding BOList}\" x:Name=\"lstDemo\" SelectedItem=\"{Binding BussinessObj,Mode=OneWayToSource}\">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel x:Name=\"stkStyleRender\" Orientation=\"Horizontal\" Background=\"Cyan\" Width=\"525\" Tag=\"{Binding DataContext,RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}\" >
<TextBlock x:Name=\"txtId\" Text=\"{Binding FirstName}\"></TextBlock>
<TextBlock x:Name=\"txtName\" Text=\"{Binding LastName}\"></TextBlock>
<StackPanel.ContextMenu>
<ContextMenu x:Name=\"cntMnuTest\" ItemsSource =\"{Binding Path=PlacementTarget.Tag,RelativeSource={RelativeSource Self}}\" >
<MenuItem Header=\"{Binding MenuItemName}\" Command=\"{Binding MenuClick}\" CommandParameter=\"Icon\"></MenuItem>
</ContextMenu>
</StackPanel.ContextMenu>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
解决方法
您好:确定了问题。
如果将上下文菜单的Item Source设置为BOList(可观察到的集合),则不会触发命令,因为
ICommand
定义位于Window数据上下文(vm)中。
我们需要明智地处理代码。
由于无法进行绑定调试,所以我在灌木丛中跳动:-)
该链接为我提供了很多WPF教程-WPF中的调试数据绑定问题
, 在上下文菜单中,使用DataContext而不是Items源
然后绑定您的菜单项
, 尝试这个:
<MenuItem Header=\"{Binding Path=PlacementTarget.MenuItemName,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type ContextMenu}}\" Command=\"{Binding Path=PlacementTarget.MenuClick,AncestorType={x:Type ContextMenu}}\" />
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。