次の問題があります。
ViewModelLocator の SimpleIoc に 4 つの ViewModel を登録しています。MainViewModel のコンストラクターで、他の 3 つの ViewModel のうち 2 つにメッセージを送信します。これらのメッセージは、これらの ViewModel によって受信されません。
後でこれらのViewModelでメッセージを送信すると、期待どおりに反応するため、メッセージング自体は機能しています。
そのため、MainViewModel コンストラクターからメッセージを送信する時点で、受信側の ViewModel がリッスンしていないことが予想されます。そこで、ViewModel を SimpleIoc に登録する順序を変更しましたが、役に立ちませんでした。
私は何を間違っていますか?
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; });
}