即使我不想立即显示它,如何从ViewModel实例化View?

时间:2019-05-28 06:53:25

标签: c# wpf mvvm caliburn.micro caliburn

我想搜索一些视图的控件,但是我只能访问它们的ViewModel,因为这些视图没有显示,并且没有该视图的活动实例。 有没有办法通过代码中的ViewModel实例化View?我必须在一处实例化其中几个实例,而只有VM类型。 我希望代码是通用的。

编辑-更具体的信息: 我有很多不同的设置视图。我要搜索它们,因为现在用户必须手动搜索-这意味着用户必须转到每个选项卡并查找他需要的单词。 我的VM当然是从输入中获取数据,但是我对数据不感兴趣-我对显示给用户的标签和文本感兴趣。

我正在使用WPF,MVVM和Caliburn.Micro。

1 个答案:

答案 0 :(得分:0)

是的,您可以做到。您需要了解视图也是一个类,因此您只需要像调用其他任何类一样在调用ShowDialog时创建一个对象即可。视图调用中的方法将显示在UI上

View MyView= new View();
ViewModel MyViewmodel= new ViewModel();
MyView.DataContext=MyViewmodel;

在这部分代码中,它将创建View和ViewModel的对象,并将dataContext Prop分配给您的Vm,但不显示在任何地方。

List<View> AllView= new List<View>()
AllView.Add(MyView);

我在这里将您的视图保存在列表中。这些可以是静态的也可以是全局的。并且每当我需要访问这些文件时,我都会这样做

AllView[0].ShowDialog();

我正在显示第一个视图。我想你有主意。按照通用方法,您可以检查它是否创建了一个对象。这并不难。按照我的看法,这不是必须的。