我有以下场景,我希望找到一个解决方案,我有一个自定义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)
我想知道的是:
Exit
的Window上的事件可以ShellViewModel订阅它并将其冒泡到加载的视图,或者加载的视图是否订阅了窗口事件。我知道这是一些问题,但它们都与同一个问题有关,我希望有人可以提供答案。
答案 0 :(得分:1)
让我试着回答你的每个问题
我应该如何正确创建自定义事件,以上是否正确?
我如何绑定到视图模型中的“事件”
可以使用相同的事件方法将事件从一个视图模型冒泡到另一个视图模型(例如,我有ShellViewModel,它最初加载一个LoginViewMode(UserControl),然后加载一个MainViewModel(UserControl),如果我在Window上有一个名为Exit的事件,那么ShellViewModel可以订阅它并将其冒泡到加载的视图,或者加载的视图是否订阅窗口事件