gpt4 book ai didi

c# - 如何使用 Unity 从 ViewModel 创建新的窗口实例?

转载 作者:行者123 更新时间:2023-12-03 10:43:47 29 4
gpt4 key购买 nike

我使用 WPF 应用程序并为此使用 MVVM 模式。我有两个单独的 View 和 View 模型项目。

在 View 中添加了 Unity 的引用,我正在使用 Unity 将我的 MainWindowViewModel 实例注入(inject)到应用程序 MainWindow 上的 StartUp View 中,并能够将 View 模型绑定(bind)到 View 。

现在,我想在单击 MainWindow View 上的按钮时打开 MainWindow 的新实例。

问题是如何从 Viewmodel 创建 View 实例。

已经尝试过以下方法:

  • Opening new window in MVVM WPF
  • The best approach to create new window in WPF using MVVM

  • 编辑:

    回答 Wills questions
  • 我想在没有任何插件或插件的情况下实现这一点,因为我不熟悉其中的任何一个以及大多数关于某些插件的答案。另外,我觉得如果我自己让它工作,让我完全控制它,这对我来说真的很方便。
  • 我尝试了 this 但无法使其工作。此外,还不清楚我必须在哪里放置什么(在 View 中或 vm 中)
  • 我不想打开多个 MainWindow ,这只是另一个工作的研发。在实际场景中,我们需要显示与系统连接的某些设备的状态,并且每个连接的设备都会有单独的 Window。即使我们可以从 Mainwindow 打开多个子窗口,我也可以。
  • 我只想用不同的数据上下文实例打开多个窗口实例,它可以来自 View 或虚拟机,但它应该维护 MVVM。
  • 最佳答案

    这就是我以前的做法:

    有一个导航的中心位置。可能是 App.xaml.cs 或者您可以拥有自己的。在这个类中,您将拥有您的 IoC 容器并控制窗口。

    然后,您可以使用 Messenger 系统在 ViewModel 和 ViewModel 之间与应用程序进行通信。 MVVM Light Toolkit为此有一个轻量级模型。还有其他 MVVM 框架/工具。 PRISM 是 Microsoft 自己的,但一开始可能会很复杂。在 PRISM 中,这种消息传递机制称为 EventAggregator。

    ViewModel 应该有一个 ICommand处理按钮单击(请参阅 MVVM Light Toolkit 中的 RelayCommands)。该命令发送应用程序正在监听的消息并打开一个新窗口。

    搜多代码:

    public class App
    {
    public void InitializeMessengerHooks()
    {
    messenger.Subscribe(typeof(OpenWindowMessage), m => OpenWindow());
    }
    }

    public class ViewModel
    {
    public void OpenWindow()
    {
    messenger.Send(new OpenWindowMessage());
    }
    }

    大致了解它是如何工作的。

    关于c# - 如何使用 Unity 从 ViewModel 创建新的窗口实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38099788/

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