C# WPF MVVM Command Binding

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# WPF MVVM Command Binding相关的知识,希望对你有一定的参考价值。

参考技术A 单窗口程序,程序执行顺序:

WPF ContextMenu 在MVVM模式中无法绑定 Command的解决办法

ContextMenu无论定义在.cs或.xaml文件中,都不继承父级的DataContext,所以如果要绑定父级的DataContext,直接DataContext=“{Binding}”是行不通的

不能绑父级,但是能绑资源

第一步:定义一个中间类用来做资源对象

 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 <UserControl.Resources>
2         <libBinding:BindingProxy x:Key="BindingProxy" Data="{Binding}"/>
3     </UserControl.Resources>

第三步:绑定ContextMenu、MenuItem

(Button.Command 和 ContextMenu.IsOpen 的绑定部分可以不关注,这两个绑定是用来控制ContextMenu打开的)

 1 <Button Command="{Binding Customfold}">
 2             <Button.ContextMenu>
 3                 <ContextMenu DataContext="{Binding Data,Source={StaticResource BindingProxy}}"  
 4                              ItemsSource="{Binding ItemModelCollection}"
 5                              IsOpen="{Binding OpenCustomfold,Mode=OneWay}">
 6                     <ContextMenu.ItemContainerStyle>
 7                         <Style TargetType="MenuItem">
 8                             <Setter Property="Header" Value="{Binding ...}"/>
 9                             <Setter Property="Command" Value="{Binding ...}"/>
10                             <Setter Property="CommandParameter" Value="{Binding ...}"/>
11                         </Style>
12                     </ContextMenu.ItemContainerStyle>
13                 </ContextMenu>
14             </Button.ContextMenu>
15             <Image .../>
16         </Button>

参考:

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

以上是关于C# WPF MVVM Command Binding的主要内容,如果未能解决你的问题,请参考以下文章

WPF自学入门WPF MVVM模式Command命令

WPF MVVM DataGrid Button Command绑定

使用 WPF + MVVM 中的 Command + CommandParameter 删除列表视图中的行

【WPF】Command 自定义命令

WPF MVVM,Prism,Command Binding

wpf中mvvm的Command绑定后,如何在点击按钮的时候在viewmodel里面异步执行方法。