我有以下問題發送時MVVM燈消息沒有收到:從視圖模型構造
我註冊4周的ViewModels與SimpleIoc在ViewModelLocator。 在MainViewModel的構造器中,我向其他3個ViewModel中的2個發送消息。 這些視圖模型未收到這些消息。
消息本身正在工作,因爲當我稍後發送消息時,這些ViewModel會按預期做出反應。
所以我期望接收的ViewModels不會在我從MainViewModel構造函數發送消息的時候偵聽。所以我切換了我用SimpleIoc註冊ViewModel的順序,但無濟於事。
我在做什麼錯?
ViewModelLocator
static ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<LoginMethodVM>();
SimpleIoc.Default.Register<DatabaseConnDataVM>();
SimpleIoc.Default.Register<UserCredentialsVM>();
SimpleIoc.Default.Register<BrowserSelectionVM>();
SimpleIoc.Default.Register<MainViewModel>();
}
public LoginMethodVM LoginMethodVM
{
get
{
return ServiceLocator.Current.GetInstance<LoginMethodVM>();
}
}
public DatabaseConnDataVM DatabaseConnDataVM
{
get
{
return ServiceLocator.Current.GetInstance<DatabaseConnDataVM>();
}
}
public UserCredentialsVM UserCredentialsVM
{
get
{
return ServiceLocator.Current.GetInstance<UserCredentialsVM>();
}
}
public BrowserSelectionVM BrowserSelectionVM
{
get
{
return ServiceLocator.Current.GetInstance<BrowserSelectionVM>();
}
}
MainViewModel
public MainViewModel()
{
Messenger.Default.Send(System.Windows.Visibility.Visible, "UserCredentialsVisible");
Messenger.Default.Send(System.Windows.Visibility.Visible, "BrowserSelectionVisible");
}
BrowserSelectionVM
public BrowserSelectionVM()
{
Messenger.Default.Register<System.Windows.Visibility>
(this,
"BrowserSelectionVisible",
msg => { Visible = msg; });
}
個UserCredentialsVM
public UserCredentialsVM()
{
Messenger.Default.Register<System.Windows.Visibility>
(this,
"UserCredentialsVisible",
msg => { Visible = msg; });
}
被實例化時,你從MainViewModel –
我的直覺是,接收器沒有,但我不能告訴我們,發送郵件,這些視圖模型改變序列不會有幫助。 – MPL
因此,如果您尚未在內存中創建視圖模型的實例,那麼註冊命令不會運行,因此沒有任何註冊可以接收消息。試一試,在你的MainViewModel構造函數調用Sends之前,創建每個視圖模型的一個實例。 SimpleIOC與這個問題無關,因爲它所做的只是注入到你的視圖模型中,並且你的視圖模型中沒有注入的構造函數參數。 –