如何使用MVVM模式创建和组织与UI不相关的元素

环式

我正在使用MVVM设计模式创建WPF应用程序。我最近才开始学习两者,但是对基础知识的工作方式有扎实的了解。

该应用程序将具有与UI不相关的类,例如网络线程和消息处理程序,以及用于保存和加载设置的类。

程序的这些元素与UI没有明确的联系。应该如何创建和初始化它们?这些是不适合特定ViewModel的“应用程序范围”服务,也不会像Model。

有正确的方法吗?什么应该“拥有”并创建这些对象?(是ViewModel,还是使它们静态并创建自己?)

这是MVVM模型的示意图,进行了一些调整以显示我想要的内容:(突出显示的文本和紫色框)

当服务器收到“用户已加入”消息时,该服务将向已订阅它的模型发送一个事件,通知它新的用户。ViewModel将看到此更改,并将用户名添加到UI。

http://i.imgur.com/Jo1mWDk.png

西蒙·法希德(Simon Farshid)

您可以具有链接到UI的某些功能的服务。(例如,仅主窗口使用它们)并且许多窗口之间也可以共享服务。

对于第一种情况,我通常在ViewModels中实例化服务。
对于应用程序范围的服务,我宁愿在App.xaml.cs中创建实例,并将引用传递给我的视图模型。

这是我的一个项目的示例。

private void Application_Startup(object sender, StartupEventArgs e)
{
    ConnectionManager connMan = new ConnectionManager();
    MainViewModel mvm = new MainViewModel(connMan);
    new MainWindow(mvm).ShowDialog();

    // TODO: save settings, etc. here

    this.Shutdown();
}

如果您的服务不依赖任何状态信息,则也可以使用静态类。例如,这就是我通常用于设置管理的内容。

编辑:对于您发布的示例,您必须问自己一个问题:

谁负责创建和维护网络管理器对象?

如果是ViewModel,则可以在其内部托管对象。如果它是由外部对象创建的,则可以将其传递给ViewModel。两种方法都各有利弊,我目前没有足够的信息向您推荐其中一种。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

不相关时如何删除元素的内容?

来自分类Dev

如何在MySQL中使用不相关的表创建视图

来自分类Dev

如何在MySQL中使用不相关的表创建视图

来自分类Dev

如何找到不相关的未使用属性?

来自分类Dev

如何使用c ++生成不相关的随机序列

来自分类Dev

如何查找不相关的未使用属性?

来自分类Dev

如何在Symfony2中使用一堆不相关的实体创建表单?

来自分类Dev

如何加快不相关数据的for循环?

来自分类Dev

雄辩。如何获取不相关的表

来自分类Dev

使用Bootstrap列时,隐藏元素会影响其他不相关的元素

来自分类Dev

当“不相关”的html select元素未选择任何选项时,如何退出jQuery事件?

来自分类Dev

如何在Wordpress中创建与任何页面都不相关的菜单标题?

来自分类Dev

Chrome在全屏模式下运行缓慢(与Flash不相关)

来自分类Dev

find命令正在选择不相关模式的文件

来自分类Dev

CSS悬停样式在不相关的元素上?

来自分类Dev

Git在新目录中创建不相关的分支

来自分类Dev

绝对导入如何与sitecustomize.py中不相关的导入一起使用?

来自分类Dev

如何在Power BI中使用DAX在不相关表中搜索字符串?

来自分类Dev

使用Svelte进行编译时,如何系统地禁用某些不相关的警告?

来自分类Dev

如何为这个问题在sql中使用内部联接编写不相关的查询?

来自分类Dev

如何使用php脚本更新两个不相关的mysql表?

来自分类Dev

如何在多个不相关的解决方案中使用(和编辑)项目?

来自分类Dev

如何在两个实体(不相关的实体)之间使用 Hibernate 进行连接

来自分类Dev

如何根据另一个不相关的元素定义一个元素的宽度?

来自分类Dev

用不相关的术语证明不相关的事物

来自分类Dev

如何从完全不相关的类更新ListView

来自分类Dev

如何防止从验证靶向不相关的ModelAttribute?

来自分类Dev

熊猫:如何最好地选择不相关的功能?

来自分类Dev

如何抓取新闻内容并删除不相关的部分

Related 相关文章

  1. 1

    不相关时如何删除元素的内容?

  2. 2

    如何在MySQL中使用不相关的表创建视图

  3. 3

    如何在MySQL中使用不相关的表创建视图

  4. 4

    如何找到不相关的未使用属性?

  5. 5

    如何使用c ++生成不相关的随机序列

  6. 6

    如何查找不相关的未使用属性?

  7. 7

    如何在Symfony2中使用一堆不相关的实体创建表单?

  8. 8

    如何加快不相关数据的for循环?

  9. 9

    雄辩。如何获取不相关的表

  10. 10

    使用Bootstrap列时,隐藏元素会影响其他不相关的元素

  11. 11

    当“不相关”的html select元素未选择任何选项时,如何退出jQuery事件?

  12. 12

    如何在Wordpress中创建与任何页面都不相关的菜单标题?

  13. 13

    Chrome在全屏模式下运行缓慢(与Flash不相关)

  14. 14

    find命令正在选择不相关模式的文件

  15. 15

    CSS悬停样式在不相关的元素上?

  16. 16

    Git在新目录中创建不相关的分支

  17. 17

    绝对导入如何与sitecustomize.py中不相关的导入一起使用?

  18. 18

    如何在Power BI中使用DAX在不相关表中搜索字符串?

  19. 19

    使用Svelte进行编译时,如何系统地禁用某些不相关的警告?

  20. 20

    如何为这个问题在sql中使用内部联接编写不相关的查询?

  21. 21

    如何使用php脚本更新两个不相关的mysql表?

  22. 22

    如何在多个不相关的解决方案中使用(和编辑)项目?

  23. 23

    如何在两个实体(不相关的实体)之间使用 Hibernate 进行连接

  24. 24

    如何根据另一个不相关的元素定义一个元素的宽度?

  25. 25

    用不相关的术语证明不相关的事物

  26. 26

    如何从完全不相关的类更新ListView

  27. 27

    如何防止从验证靶向不相关的ModelAttribute?

  28. 28

    熊猫:如何最好地选择不相关的功能?

  29. 29

    如何抓取新闻内容并删除不相关的部分

热门标签

归档