【发布时间】:2015-10-07 11:52:30
【问题描述】:
我希望找到以下解决方案,我有一个自定义 Window 类,并且我创建了一个如下事件(为简洁起见,我删除了一些代码)
public class AeroWindow : Window
{
public delegate void SystemMenuEventHandler(object sender);
public event SystemMenuEventHandler Exit;
...
public override void OnApplyTemplate()
{
...
var exitButton = this.GetTemplateChild("SM_ExitButton") as Button;
if (exitButton != null)
{
exitButton.Click += (sender, args) => { this.OnExit(); };
}
}
protected virtual void OnExit()
{
if (this.Exit != null)
{
this.Exit(this);
}
}
}
我将 MVVM 与 Calibutn.Micro 一起使用,并且我有一个 ShellViewModel 和 ShellView(ShellView 继承自 AeroWindow)
我想知道的是:
- 我应该如何正确创建自定义事件,以上正确吗?
- 然后我如何绑定到视图模型中的“事件”
- 是否可以使用相同的事件方法将事件从一个视图模型冒泡到另一个视图模型(例如,我有 ShellViewModel,它最初加载 LoginViewMode (UserControl),然后加载 MainViewModel (UserControl),如果我有Window 上的一个名为
Exit的事件可以让 ShellViewModel 订阅该事件并将其冒泡到加载的视图中,或者加载的视图是否应该订阅窗口事件)
我知道这是很多问题,但它们都与同一件事有关,我希望有人能提供答案。
【问题讨论】:
-
为什么要将退出事件绑定到视图模型?视图模型是否需要知道您正在退出应用程序?
-
exit 只是一个例子,很明显 AeroWindow 会处理退出,还有其他我想要创建和绑定的事件
标签: c# wpf xaml mvvm caliburn.micro