一、说明
1)本文和后续文章以wpf应用程序为例说明
2) 本文和后续文章介绍Community_Toolkit_mvvm工具:首先在工程中打开Nuget下载 Community.Toolkit.Mvvm相关程序集,然后引用相关命名空间
二、关联方式
1)控件的DataContext属性相当于数据容器,所以在 View.Xaml.cs的构造函数中直接实例化ViewModel.cs类并赋值给View的DataContext属性即可。如下:
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainViewModel();
}
2) 首先在对应的View中引用ViewModel文件的命名空间 。如:
xmlns:local1="clr- namespace:WpfApp1.ViewModel"
然后在View的资源字典(<Windows.Resource>)中引用ViewModel类,并设置资源关键字。如:
<local1:MainWindowViewModel x:Key="InteractionTriggers"></local1:MainWindowViewModel>
最后在用到ViewModel中该类的属性或方法的地方绑定上面的资源关键字即可。总结就是"引用"和"绑定"。如:
CallMethodAction TargetObject="{Binding Source={StaticResource ResourceKey=InteractionTriggers}}"
3) 类似于第1种方法:在View的Xaml语句中将Window数据上下文属性Window.DataContext设置为ViewModel的实例,然后在运用的地方绑定其中的属性。如:
<Window.DataContext><local:MyViewModel /></Window.DataContext>
4) 类似于第3中方法:因为DataContext是所有控件都具备的依赖属性。除非在控件上显示设置,否则用于解析绑定数据的上下文将继承于父控件,因此通常将ViewModel类实例赋值给整个window的DataContext属性。所以在某控件设置,就可以绑定该控件.如:
<StatckPanel.DataContext><local:MyViewModel /></StatckPanel.DataContext>
(注意不能采用<StatckPanel DataContext="local:MyViewModel "></StatckPanel>形式设置,因为DataContext不是StackPanel的内容属性)。因此其子控件就可以绑定ViewModel中的属性、命令:
<StatckPanel>
<TextBox Text="{Binding Name}" />
<Button Command="{Binding SaveCommand}" Content="Save" />
</StatckPanel>
三、总结
在View中关联ViewModel类实例,常用的两种方法:1)View中窗体或控件的DataContext属性赋ViewModel类的实例;2)引用ViewModel类的命名空间,在View窗体的资源字典中引用ViewModel类并设置资源关键字