WPF ContextMenu 在MVVM模式中绑定 Command及使用CommandParameter传参
2021-03-24 06:24
标签:image listbox apr 文件 理解 stack ons man source ContextMenu无论定义在.cs或.xaml文件中,都不继承父级的DataContext,所以如果要绑定父级的DataContext,直接DataContext=“{Binding}”是行不通的 不能绑父级,但是能绑资源 第一步:定义一个中间类用来做资源对象 第二步:引用命名空间,在控件中定义资源 第三步:绑定ContextMenu、MenuItem (Button.Command 和 ContextMenu.IsOpen 的绑定部分可以不关注,这两个绑定是用来控制ContextMenu打开的) 第四步:传递参数 ContextMenu是它自身视觉树的根节点,所以即使通过RelativeSource.FindAncestor也找不到要传递的参数。 解决:可以通过PlacementTarget解决。微软对PlacementTarget的解释是:获取或设置UIElement,当它打开时相对于它确定ContextMenu的位置。应该可以理解为放置此ContextMenu的UIElement。 1 CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}, Path=PlacementTarget}" 如果要传递Item,如ListBox的SelectedItem: 1 CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}, Path=PlacementTarget.SelectedItem}" 参考: http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/ http://stackoverflow.com/questions/1580753/wpf-contextmenu-with-itemssource-how-to-bind-to-command-in-each-item WPF ContextMenu 在MVVM模式中绑定 Command及使用CommandParameter传参 标签:image listbox apr 文件 理解 stack ons man source 原文地址:https://www.cnblogs.com/lonelyxmas/p/9443877.html 1 public class BindingProxy : Freezable
2 {
3 #region Overrides of Freezable
4
5 protected override Freezable CreateInstanceCore()
6 {
7 return new BindingProxy();
8 }
9
10 #endregion
11
12 public object Data
13 {
14 get { return (object)GetValue(DataProperty); }
15 set { SetValue(DataProperty, value); }
16 }
17
18 public static readonly DependencyProperty DataProperty =
19 DependencyProperty.Register("Data", typeof(object), typeof(BindingProxy), new UIPropertyMetadata(null));
20 }
1
1
文章标题:WPF ContextMenu 在MVVM模式中绑定 Command及使用CommandParameter传参
文章链接:http://soscw.com/index.php/essay/67881.html