wpf 代码获取contextmenu_如何使用MVVM模式单击项目时,如何在WPF上下文菜单上获取PlacementTarget...

我意识到这是一篇旧帖子,但是有人可能会发现这很有用。假设您已将视图绑定到视图模型,则可以通过以下方式将ContextMenu.DataContext绑定到视图模型:

首先,将您的视图命名为UserControl ...为了简单起见,我通常将我的所有名称命名为This。然后记住我们的视图模型绑定到UserControl的DataContext,我们可以使用{Binding DataContext, ElementName=This}绑定到视图模型。

所以现在我们可以绑定到视图模型,我们必须将它与ContextMenu.DataContext连接起来。我使用对象的Tag属性和ContextMenu(PlacementTarget)作为该连接,在本例中为Grid:

...

然后,我们可以通过ContextMenu.DataContext属性绑定到PlacementTarget.Tag属性(在我们的例子中Grid的)访问该ContextMenu视图模型属性和命令:

"{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource

AncestorType=ContextMenu}}" CommandTarget="{Binding PlacementTarget,

RelativeSource={RelativeSource Self}}" />

请注意MenuItem.CommandTarget属性上的绑定。设置这确保了在其上提出的指定的命令目标元件是PlacementTarget,或在这种情况下,Grid。

另请注意CommandParameter绑定。这结合了PlacementTarget的DataContext,或在这种情况下Grid。该Grid的DataContext将从DataTemplate继承,因此,如果您使用的ICommand执行界面数据项被绑定到object参数在Command:

public bool CanExecuteDeleteFileCommand(object parameter)

{

return ((YourDataType)parameter).IsInvalid;

}

public void ExecuteDeleteFileCommand(object parameter)

{

Delete((YourDataType)parameter);

}或者,如果你正在使用某种形式的直接RelayCommand代表在您的视图模型:

public ICommand Remove

{

get

{

return new ActionCommand(execute => Delete((YourDataType)execute),

canExecute => return ((YourDataType)canExecute).IsInvalid);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值