微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

WPF +绑定命令和使用MVVM的上下文菜单项的标题

如何解决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 举报,一经查实,本站将立刻删除。