首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从视图模型(Caliburn+WPF)关闭对话框窗口?

如何从视图模型(Caliburn+WPF)关闭对话框窗口?
EN

Stack Overflow用户
提问于 2012-04-10 22:23:46
回答 2查看 17.7K关注 0票数 19

我有与之关联的ViewModel1和View1。我使用IWindowManager对象从ViewModel2 (另一个视图模型)启动对话框窗口。来自ViewModel2类的代码:

代码语言:javascript
复制
windowManager.ShowDialog(new ViewModel());

因此,我有一个带有View1用户控件的对话框窗口。

我的答案是下一步-我可以使用红色的关闭按钮关闭对话框窗口,但如何使用我的特定按钮(包含在View1用户控件中)关闭它,类似于带有关闭命令的“取消”按钮(Command={Binding CancelCommand}),当然CancelCommand包含在ViewModel1类中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-20 04:15:48

如果视图模型扩展了Caliburn.Micro.Screen,那就更简单了

代码语言:javascript
复制
TryClose();
票数 44
EN

Stack Overflow用户

发布于 2012-04-11 00:30:12

您可以通过在ViewModel上实现IViewAware接口来获取当前视图(在本例中为对话框窗口)。然后,在执行命令时,可以在视图(作为对话框创建的Window )上调用Close

最简单的原因是从ViewAware派生

代码语言:javascript
复制
public class DialogViewModel : ViewAware
{
    public void ExecuteCancelCommand()
    {
        (GetView() as Window).Close();
    }
}

如果你不允许派生,你可以自己实现它:

代码语言:javascript
复制
public class DialogViewModel : IViewAware
{
    public void ExecuteCancelCommand()
    {
        dialogWindow.Close();
    }

    private Window dialogWindow;
    public void AttachView(object view, object context = null)
    {
        dialogWindow = view as Window;
        if (ViewAttached != null)
            ViewAttached(this, 
               new ViewAttachedEventArgs(){Context = context, View = view});
    }

    public object GetView(object context = null)
    {
        return dialogWindow;
    }

    public event EventHandler<ViewAttachedEventArgs> ViewAttached;
}

注意:我的示例使用的是Caliburn.Micro 1.3.1。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10090584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档