Caliburn.Micro:从主窗口打开新窗口,然后将其连接到viewmodel

时间:2016-11-29 20:39:49

标签: wpf mvvm caliburn.micro caliburn

我遇到Caliburn.Micro的问题:我有ShellView.xaml和ShellViewModel.cs,我想打开新的对话窗口' NewDialogView.xaml'来自ShellViewModel。

<StackPanel>
    <Button x:Name="Click"
            Content="Click"
            />
</StackPanel>

internal class ShellViewModel
{
    public void Click()
    {
        Window newDialogView = new NewDialogView();
        newDialogView.Show();
    }
}

然后当用户进入新窗口时,他/她可以点击按钮并获得一些消息:

<StackPanel>
    <Button x:Name="ShowMessage"
            Content="Click"
            />
</StackPanel>

internal class NewDialogViewModel
{
    public void ShowMessage()
    {
        MessageBox.Show("Hello!");
    }
}

问题是,当用户点击NewDialogView.xaml中的按钮时,没有任何反应。没有包含内容&#39; Hello&#39;的消息框。请帮忙!

2 个答案:

答案 0 :(得分:2)

只是为了扩展@mvermef在上面的评论中所说的内容。

您需要使用Caliburn Micro的窗口管理器来显示您的对话框。然后Caliburn将能够在后台完成所有管道工作。通常,您将使用Caliburn引导程序使用窗口管理器创建ShellViewModel

internal class ShellViewModel
{
    public ShellViewModel(IWindowManager theWindowManager)
    {
        this.windowManager = theWindowManager;
    }

    public void Click()
    {
        // Assumes that there is a NewDialogView...
        var newDialogViewModel = new NewDialogViewModel();
        bool? result = this.windowManager.ShowDialog(newDialogViewModel);
        // result is true if user pressed ok button...
    }
}

答案 1 :(得分:1)

只想分享我可能如何做的最简单的方法打开新窗口

IWindowManager manager = new WindowManager();

public void Button()
{
    manager.ShowWindow(new MyViewModel(), null, null);
}

And how to close it...