nab*_*rid 46 wpf mvvm mvvm-light
我在我的WPF应用程序中使用MVVM Light工具包.我想知道从现有窗口打开新窗口的最佳方法是什么.我有这个MainViewModel,负责MainWindow我的申请.现在,MainView按下按钮,我想打开它上面的第二个窗口.我有RelayCommmand绑定到Button的Command.在RelayCommand方法中,我可以创建一个新的窗口对象,只需调用Show(),如下所示:
var view2 = new view2()
view2.Show()
但我不认为ViewModel应该负责创建新view2对象.我已经阅读了这篇文章WPF MVVM从VIEW MODEL获取Parent,其中Bugnion建议将消息传递给view1from viewmodel1,然后view1应该创建新的view2.但是我不确定他将这条消息传递给他的意思是view1什么?如何view1处理消息?在它的代码背后或什么?
此致,Nabeel
Mat*_*sto 56
将消息从ViewModel1传递到View1意味着使用MVVM Light Toolkit中的消息传递功能.
例如,您的ViewModel1可能有一个名为ShowView2Command的命令,然后它会发送一条消息来显示视图.
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();
        }
    }
}
| 归档时间: | 
 | 
| 查看次数: | 29691 次 | 
| 最近记录: |