当前位置:  开发笔记 > 编程语言 > 正文

如何进一步将此WPF示例与MVC,MVP或MVVM分离?

如何解决《如何进一步将此WPF示例与MVC,MVP或MVVM分离?》经验,为你挑选了1个好方法。

我已经通过以下方式解耦了这个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输入(按钮,菜单项......)他们的命令是[你的命令的名字]并在一个地方处理所有这些.



1> Chen Kinnrot..:

我建议您使用命令而不是经典事件来实现事件处理.它在WPF中很容易,因为命令模式已经实现,你可以告诉你所有的UI输入(按钮,菜单项......)他们的命令是[你的命令的名字]并在一个地方处理所有这些.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有