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。