gpt4 book ai didi

c# - 如何使用 MVVM 模式创建和组织非 UI 相关元素

转载 作者:行者123 更新时间:2023-11-30 22:03:20 25 4
gpt4 key购买 nike

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

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

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

有正确的方法吗?什么应该“拥有”并创建这些对象? (ViewModel,或者更确切地说,让它们静态化并自行创建?)

这是 MVVM 模型的图表,经过一些调整以显示我正在寻找的内容:(突出显示的文本和紫色框)

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

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

最佳答案

您可以拥有链接到 UI 的特定功能的服务。 (例如,只有主窗口使用它们)并且还可以有在多个窗口之间共享的服务。

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

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

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();
}

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

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

Who is responsible for creating and maintaining the network manager object?

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

关于c# - 如何使用 MVVM 模式创建和组织非 UI 相关元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26078038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com