0. MVVM介绍及前置知识
上图来自
维基
。组成要素:
- Model:表示具体数据内容(represents real state content)
- View:界面展示
- View Model:View的抽象,提供公共属性和命令(an abstraction of the view exposing public properties and commands),业务代码
- Binder:(a view directly binds to properties on the view model to send and receive updates.)
界面交互方式:
- 通过 RoutedEvents 响应
- 通过命令Command(Commands provides glue between View and ViewModel for interactivity)
1. 初始工作
首先建立三个文件夹,用以存放Command、ViewModel和View
2. 创建view
在MainWindow.xaml中添加如下代码
3. 实现Commands
以加法命令为例(命名为:PlusCommand):
-
继承接口ICommand
在ICommand接口中包含三个成员(两个方法、一个事件):
成员 | 含义 |
---|---|
public bool CanExecute(object parameter) |
如果返回true,则关联的Command命令将被执行。此方法接受一个object参数,通常传递 委托 ,比如Action、Predicate 、Func。 |
public void Execute(object parameter) |
当方法CanExecute返回true时,此方法开始执行相应的Command命令。同样,此方法接受一个object参数,通常传递 委托 。 |
event EventHandler CanExecuteChanged | 当命令可执行状态发生改变时,被激发(This is used to notify the UI controls associated with Command if Command can be executed. Based on notification of this event, UI controls change its status as enabled or disabled. Basically, while “CanExecute” method executes and if there is a change in method’s output (true/false) then this event is fired.) |
为简单起见,在方法CanExecute直接返回true,而在方法Execute中执行具体命令。
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
calculatorVM.Add();
}
4. 创建View Model
-
添加成员变量及其属性
-
实现AddCommand
public ICommand AddCommand
{
get
{
return plusCommand;
}
}
-
继承INotifyPropertyChanged
这样当对应成员变量值改变时,可以通知到与之绑定的UI元素。
5. 为View设置上下文
- 法一:在view对应的.cs文件中添加如下代码
public partial class CalculatorView : UserControl
{
public CalculatorView()
{
InitializeComponent();
this.DataContext = new CalculatorVM();
}
}
- 法二:在view对应的.xaml添加如下代码
将SimpleMVVMDemo.ViewModels名称空间映射成XALM中的vm名称空间。
xmlns:vm="clr-namespace:SimpleMVVMDemo.ViewModels"
加入到
资源
字典
<UserControl.Resources>
<vm:CalculatorVM x:Key="calculatorVM" />
</UserControl.Resources>
tips:通过“key-value”的形式便于资源检索。
为DataContext赋值
<Grid DataContext="{Binding Source={StaticResource ResourceKey=calculatorVM}}">
此时,运行程序,输入数字,点击“+”,即可显示出结果。
同理,对“-”、“*”、“/”做相同步骤。
5. 参考
版权声明:本文为zxt_1原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。