我已经通过以下方式解耦了这个WPF应用程序中的事件.
继续脱钩的最佳方法是什么?
Shell.xaml:
Bootstrapper.cs:
public void Run() { Shell shell = new Shell(new Customer()); shell.Show(); }
Shell.xaml.cs:
public Shell(IPerson person) { InitializeComponent(); btnProcess.Click +=new RoutedEventHandler(person.Process); }
Customer.cs:
public class Customer : IPerson { public void Process(object sender, RoutedEventArgs e) { Button theButton = (Button)sender; theButton.Content = "Customer processed."; } }
上面的代码成功地将视图Shell
与模型分离,Customer:IPerson
以便我可以交换例如以Employee:IPerson
自己的方式处理"已处理" 的模型等.这是第一个目标.
但现在:
我如何将该Processed
方法与特定于Button 的方式分离,以便它还可以与一个MenuItem或一个ListView进行对话,该ViewView在视图中触发事件,因此它甚至不必是一个调用它的元素,例如单元测试类?
除了发送者(按钮)之外,如何更改视图的其他元素,例如,如何更改Shell中的状态栏?我看到两种方式:
我可以构建一个容纳所有视图的容器,并在创建时将容器注入Customer中,然后客户可以查看容器并操纵它想要的调用视图(尽管我必须以某种方式匹配发送事件的视图)和容器中的视图一样)
我可以以某种方式在触发事件时使用eventargs将整个视图(Window对象)发送到Model,尽管Model需要某种方式知道(通过接口)在运行时可以操作的区域类型
您将如何在更加分离的设计方向上继续使用此应用程序?
这实际上是什么模式,例如MVC,MVP,MVVM?我只看到一个视图(Shell)和一个Model(Customer).
演示者如何适应?
ViewModel如何适应?
控制器如何适应?
Chen Kinnrot.. 5
我建议您使用命令而不是经典事件来实现事件处理.它在WPF中很容易,因为命令模式已经实现,你可以告诉你所有的UI输入(按钮,菜单项......)他们的命令是[你的命令的名字]并在一个地方处理所有这些.
我建议您使用命令而不是经典事件来实现事件处理.它在WPF中很容易,因为命令模式已经实现,你可以告诉你所有的UI输入(按钮,菜单项......)他们的命令是[你的命令的名字]并在一个地方处理所有这些.