使用caliburn micro打开另一个视图

时间:2013-03-24 18:01:24

标签: c# wpf view caliburn.micro

我使用Caliburn.Micro,我有2个View和相对2 ViewModel:

  • MainView(MainViewModel)
  • BView(BViewModel)

在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");
    }    
}

我该怎么办?

1 个答案:

答案 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。