2011-12-21 87 views
0

我想从ViewModel打开一个窗口。 如何使用Galasoft Messenger创建并显示它?Galasoft Messenger显示窗口

public partial class View { 
    public View() { 
     InitializeComponents(); 
     //Register Open message 
    } 

    //This is called when ViewModel sends a message 
    public void OpenView() { 
     new View().Show(); 
    } 
} 

public class ViewModel { 
    public ViewModel() { 
     //Send message to open some view 
    } 
} 
+1

首先显示我们*您的*代码,然后我们将使用该代码。 – BoltClock 2011-12-21 15:27:29

+0

呃,imo Views不应该为您的应用程序的导航负责。为此创建一个ViewModel并使用DataTemplates显示视图。 – Rachel 2011-12-21 16:30:44

+0

但是,你会如何创建一个视图的实例并显示它? – 2011-12-22 07:06:13

回答

2

这种情况并不需要将一个对象从ViewModel传递给View;因此,只注册类型对象,传递null,但令牌是关键。

public partial class View { 
    public View() { 
     InitializeComponents(); 
     //Register Open message BEFORE ViewModel calls Messenger.Default.Send 
     Messenger.Default.Register<object>(this, ViewModel.OpenViewToken, p => { OpenView(); }); 
    } 

    //This is called when ViewModel sends a message 
    public void OpenView() { 
     new View().Show(); 
    } 
} 

public class ViewModel { 
    public static readonly Guid OpenViewToken = Guid.NewGuid(); 
    public ViewModel() { 
     Messenger.Default.Send<object>(null, OpenViewToken); 
    } 
} 
+0

注意:此代码可能具有语法错误等,正如我按内存放下它的。 – 2011-12-21 16:02:50

+0

Messenger.Default.Register (this,ViewModel.OpenViewToken,p => {OpenView();});将被注册,如果我们在构造函数中进行它应该打开? – 2011-12-23 09:34:21

+1

弗拉基米尔,如果没有,那么在App.cs.我不知道该视图是否只是任何视图或确切的视图。 (请确保您在发送之前注册。) – 2011-12-23 15:09:39