nab*_*rid 46 wpf mvvm mvvm-light
我在我的WPF应用程序中使用MVVM Light工具包.我想知道从现有窗口打开新窗口的最佳方法是什么.我有这个MainViewModel,负责MainWindow我的申请.现在,MainView按下按钮,我想打开它上面的第二个窗口.我有RelayCommmand绑定到Button的Command.在RelayCommand方法中,我可以创建一个新的窗口对象,只需调用Show(),如下所示:
var view2 = new view2()
view2.Show()
Run Code Online (Sandbox Code Playgroud)
但我不认为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"));
}
}
Run Code Online (Sandbox Code Playgroud)
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29691 次 |
| 最近记录: |