我正在使用MVVM设计模式创建WPF应用程序。我最近才开始学习两者,但是对基础知识的工作方式有扎实的了解。
该应用程序将具有与UI不相关的类,例如网络线程和消息处理程序,以及用于保存和加载设置的类。
程序的这些元素与UI没有明确的联系。应该如何创建和初始化它们?这些是不适合特定ViewModel的“应用程序范围”服务,也不会像Model。
有正确的方法吗?什么应该“拥有”并创建这些对象?(是ViewModel,还是使它们静态并创建自己?)
这是MVVM模型的示意图,进行了一些调整以显示我想要的内容:(突出显示的文本和紫色框)
当服务器收到“用户已加入”消息时,该服务将向已订阅它的模型发送一个事件,通知它新的用户。ViewModel将看到此更改,并将用户名添加到UI。
您可以具有链接到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] 删除。
我来说两句