ViewModel 之间是否可以通信?
Is communication possible between ViewModels?
例如,从新闻列表页面移动到详细新闻。
我可以将带有新闻列表的选定项目传递给详细信息吗?
在 newsLisViewModel
NewsDetailVm.SelectedNews = SelectedNews;
在 newsListPage
await Navigation.PushAsync(new NewsDetailPage());
还是应该只处理页面本身?
await Navigation.PushAsync(new NewsDetailPage(e.Item as News));
您可以与 MainViewModel()
和提供此 MainViewModel()
单例的工厂进行通信
public class MainViewModelFactory{
private static MainViewModel main{get;set;}
public static MainViewModel GetReference(){
if(main == null){
main = new MainViewModel();
return main;
}else
return main;
}
}
MainViewModel 有一个所有其他需要的 Viewmodel 的实例。
因此您可以使用 MainViewModelFactory.GetReference().DoAnything();
访问
您拥有的每个 ViewModel。
但正如@Charleh 所说,这是一种非常耦合的方式。我没有使用 Pub Sub,但是 here 是 UWP MVVM Pub Sub 教程,如果您需要更宽松的方式来实现您的 ViewModels。
例如,从新闻列表页面移动到详细新闻。 我可以将带有新闻列表的选定项目传递给详细信息吗? 在 newsLisViewModel
NewsDetailVm.SelectedNews = SelectedNews;
在 newsListPage
await Navigation.PushAsync(new NewsDetailPage());
还是应该只处理页面本身?
await Navigation.PushAsync(new NewsDetailPage(e.Item as News));
您可以与 MainViewModel()
和提供此 MainViewModel()
单例的工厂进行通信
public class MainViewModelFactory{
private static MainViewModel main{get;set;}
public static MainViewModel GetReference(){
if(main == null){
main = new MainViewModel();
return main;
}else
return main;
}
}
MainViewModel 有一个所有其他需要的 Viewmodel 的实例。
因此您可以使用 MainViewModelFactory.GetReference().DoAnything();
您拥有的每个 ViewModel。
但正如@Charleh 所说,这是一种非常耦合的方式。我没有使用 Pub Sub,但是 here 是 UWP MVVM Pub Sub 教程,如果您需要更宽松的方式来实现您的 ViewModels。