以前的做法:

1.当项目的时间比较紧迫的时候,对UI层中控件的事件的处理,往往采取的是类似Winform中最简单的做法,直接做一个事件的Handler直接去调用VM层的方法。

2.控件只有一个Command属性,其它的事件的处理方法没有办法和ViewModel层进行解耦的时候往往也采取上面提到的方法。

如下图所示:

WPF系列之二:解耦View层控件事件与ViewModel层事件的响应

WPF系列之二:解耦View层控件事件与ViewModel层事件的响应

新的做法:

为了实现事件的处理与View层的解耦,我们可以利用WPF提供的附加属性来为需要的事件添加附加行为。附加属性扮演了一个在View层与Model层牵线的角色。

需要下面三个步骤来实现(以Load事件为例):

1.在ViewModel中定义一个Command属性

 winloadedCommand = new DelegateCommand(this.executeWinloadedCommand, this.canWinloadedCommand);
实例化Command

相关文章: