gpt4 book ai didi

wpf - 如何使用 MVVM Light Toolkit 打开新窗口

转载 作者:行者123 更新时间:2023-12-02 02:56:50 25 4
gpt4 key购买 nike

我在我的 WPF 应用程序中使用 MVVM Light 工具包。我想知道从现有窗口打开新窗口的最佳方法是什么。我有这个 MainViewModel,它负责我的应用程序的 MainWindow。现在在 MainView 中,单击按钮后,我想在其顶部打开第二个窗口。我已将 RelayCommmand 绑定(bind)到 ButtonCommand。在 RelayCommand 的方法中,我可以创建一个新的窗口对象并简单地调用 Show(),如下所示:

var view2 = new view2()
view2.Show()

但我认为 ViewModel 不应该负责创建新的 view2 对象。我读过这篇文章WPF MVVM Get Parent from VIEW MODEL其中 Bugnion 建议将消息​​从 viewmodel1 传递到 view1,然后 view1 应创建新的 view2。但我不确定他将消息传递给 view1 到底是什么意思? view1 应该如何处理该消息?在它的代码后面还是什么?

问候,纳比尔

最佳答案

将消息从 ViewModel1 传递到 View1 意味着使用 messaging capabilities in the MVVM Light Toolkit .

例如,您的 ViewModel1 可能有一个名为 ShowView2Command 的命令,然后它会发送一条消息来显示 View 。

public class ViewModel1 : ViewModelBase
{
public RelayCommand ShowView2Command { private set; get; }

public ViewModel1() : base()
{
ShowView2Command = new RelayCommand(ShowView2CommandExecute);
}

public void ShowView2CommandExecute()
{
Messenger.Default.Send(new NotificationMessage("ShowView2"));
}
}

View1 将在其后台代码中注册接收消息,并在收到正确消息时显示 View2。

public partial class View1 : UserControl
{
public View1()
{
InitializeComponent();
Messenger.Default.Register<NotificationMessage>(this, NotificationMessageReceived);
}

private void NotificationMessageReceived(NotificationMessage msg)
{
if (msg.Notification == "ShowView2")
{
var view2 = new view2();
view2.Show();
}
}
}

关于wpf - 如何使用 MVVM Light Toolkit 打开新窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3386349/

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