【问题标题】:Close window with Catel关闭与 Catel 的窗口
【发布时间】:2013-09-06 20:22:03
【问题描述】:

我使用Catel 作为我的 MVVM 框架来开发 WPF 应用程序。

我通过 Catel 提供的 UIVisualizerService 打开我的窗口,如下所示:

this.uiVisualizerService.ShowDialog(new ViewModel);

这非常有效。 问题是我无法关闭我的窗口,就像 Catel 网站上所说的那样

this.CloseViewModel(true);

当我点击取消按钮时,命令被执行,但没有任何反应。

更多信息:

我的窗口代码隐藏类:

public partial class Window : Window
{
    public Window()
    {
        this.InitializeComponent();
    }
}

我的取消按钮:

<Button Command="{Binding CancelCommand}" />

我的视图模型中的命令方法:

 private void CancelCommandExecuted()
    {
        this.CloseViewModel(true);
    }

提前致谢!

【问题讨论】:

  • 你是使用DataWindow还是自定义实现?
  • 无,我必须这样做吗?我可以在标准 WPF 窗口中使用它吗?

标签: c# wpf mvvm catel


【解决方案1】:

此问题已在最新的夜间版本中修复。

有关此问题的更多信息: https://catelproject.atlassian.net/browse/CTL-158

有关获取最新夜间版本的更多信息: https://catelproject.atlassian.net/wiki/display/CTL/Getting+prerelease+%28beta%29+versions+via+NuGet

【讨论】:

  • 这不能与标准/默认 WPF 窗口结合使用。通过每晚构建,如果它来自“DataWindow”,我可以关闭我的窗口,但如果它来自“Window”,则不能。
  • 如果它是一个常规/标准的 WPF 窗口,那么它怎么可能通过 VM 加载。该窗口应包含一个 WindowLogic 或 WindowLogicBehavior 以表现得像一个 Catel 窗口。
  • 好的,所以不可能?即使我使用提供的UIVisualizerService 打开窗口(就像我在开始帖子中所说的那样)?
  • 不,原因是它通过 MySpecialViewModel => MySpecialWindow 的命名约定找到窗口。但是,基于 VM.Closed 事件关闭视图是在 LogicBase 中实现的。您需要将其添加到您的窗口中。如果您不想使用 DataWindow,请阅读以下内容:catelproject.atlassian.net/wiki/display/CTL/…
  • 好的,我试试这个。非常感谢!
【解决方案2】:

我使用https://catelproject.atlassian.net/wiki/display/CTL/MVVM+behaviors#MVVMbehaviors-WindowBehavior解决了这个问题

现在我有一个普通的 WPF 窗口,我可以用 Catel 关闭它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    相关资源
    最近更新 更多