【问题标题】:Sharing model from some window with MainWindow with MVVM使用 MVVM 从某个窗口与 MainWindow 共享模型
【发布时间】:2016-05-21 09:04:19
【问题描述】:

我的应用程序架构存在一些问题。我需要创建一些应用程序来打开一些 UDP 套接字来发送和接收一些数据。

问题是我想创建一些带有连接配置字段(如 IP、本地端口、远程端口)的附加窗口 (ConfigurationWindow)。此窗口应在单击某些按钮时从 MainWindow 打开,并在数据保存命令时关闭。根据 MVVM,此 ConfigurationWindow 正在创建 ConfigurationViewModel,它正在创建具有 IP 和端口属性的 ConfigurationModel。

一切都清楚了,但是如果我想在主窗口中单击“连接”按钮建立连接怎么办。在 MainWindowViewModel 中,我没有从 ConfigurationViewModel 引用 ConfigurationModel。我再说一遍:ConfigurationWindow 关闭后,ConfigurationViewModel 和 ConfigurationModel 对象不存在。

解决这个问题的最佳方法是什么,这个软件的架构应该是什么样的?也许问题出在我对 MVVM 模式的理解上。

【问题讨论】:

    标签: c# .net mvvm


    【解决方案1】:

    这里最简单的解决方案是让您设置这些值的模型对象在两个视图模型之间共享。

    如果您创建一个具有这些属性的类,则可以从该类公开一个静态实例,两个视图模型可以访问相同的数据设置实例并获取属性,而无需关心对方在做什么。

    公共类模型{ 公共字符串 IP {get;设置;}

    公共静态模型StaticInstance {get;放} }

    然后在任一视图模型中使用...访问它

    Model.StaticInstance.IP = ...

    就像我说的,这是最简单的。如果您需要更持久的东西,您可以通过多种其他方式共享数据 - 文件、注册表、数据库。

    或者,您可以将配置视图模型用作数据源 - 在 app.xaml 中声明并可在整个应用中绑定。

    希望这些提示可以帮助您找到最适合您的特定场景的解决方案。

    【讨论】:

    • 关于最简单的解决方案:您的意思是将模型作为单例吗?将 ViewModel 设为 DataSource 怎么样?您能对这个解决方案多说一些吗?我找不到这方面的任何信息,听起来很有趣。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 2012-01-15
    • 2016-05-25
    相关资源
    最近更新 更多