我使用Caliburn.Micro,我有2个View和相对2 ViewModel:
在BView中,我有一个DataGrid,在BView中有一个填充DataGrid的方法。 在MainView中有一个Botton,我想让你点击按钮打开BView窗口并调用methot来填充DataGrid(方法名称为:AllArticles)。
因此,当我单击按钮(在MainWiew中)时,将打开BView并填充DataGrid。
MainViewModel代码是:
[Export(typeof(IShell))]
public class MainViewModel : Screen
{
public string Path{ get; set; }
public void Open()
{
OpenFileDialog fd = new OpenFileDialog();
fd.Filter = "Text|*.txt|All|*.*";
fd.FilterIndex = 1;
fd.ShowDialog();
Path= fd.FileName;
NotifyOfPropertyChange("Path");
}
}
BViewModel代码是:
public class BViewModel : Screen
{
public List<Article> List { get; private set; }
public void AllArticles()
{
Recover recover = new Recover();
List = recover.Impor().Articles;
NotifyOfPropertyChange("List");
}
}
我该怎么办?
答案 0 :(得分:2)
考虑使用Caliburn的WindowManager。主视图模型中的代码可能如下所示:
[Export(typeof(IShell))]
public class MainViewModel : Screen
{
public string Path{ get; set; }
[Import]
IWindowManager WindowManager {get; set;}
public void Open()
{
OpenFileDialog fd = new OpenFileDialog();
fd.Filter = "Text|*.txt|All|*.*";
fd.FilterIndex = 1;
fd.ShowDialog();
Path= fd.FileName;
NotifyOfPropertyChange("Path");
WindowManager.ShowWindow(new BViewModel(), null, null);
}
}
另外,我注意到你的MainViewModel类上有Export(IShell)属性 - 这看起来不正确,因为Screen不是IShell。