我需要的是一种以编程方式查找哪个ViewModel(在MVVM中)对应于当前在应用程序上显示的内容的方法。
我有一个包含comm处理程序方法的ViewModel。从外部线程调用此comm处理程序。发生这种情况时,我需要做两件事之一:如果屏幕上有与VM对应的视图,我需要解析并将消息内容显示在屏幕上。如果屏幕上没有与VM对应的视图,我需要存储该消息以供日后使用。
例如,如果我有一个DisplayPage.xaml和一个DisplayPageViewModel.cs,并且该应用程序当前正在显示DisplayPage的内容,我想要类似于下面的代码来达到特定任务。
if (<code to find VM type here> == typeof(DisplayPageViewModel)){
//do viewmodel specific task
}
但是,如果应用当前正在显示MainPage.xaml,我不希望代码运行。
答案 0 :(得分:3)
您可以使用is
关键字来检查类型。您可以使用DataContext
属性来获取DataContext :-)
public class ViewModelOne{
}
public class ViewModelTwo{
}
public class MasterClass : Control{
public void CheckViewModel(){
if(this.DataContext is ViewModelOne){
}
else if(this.DataContext is ViewModelTwo){
}
}
}