我有以下情况,我希望找到解决方案,我有一个自定义 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
的窗口可以让 ShellViewModel 订阅它并将其冒泡到加载的 View ,或者加载的 View 是否订阅窗口事件)我知道这是很多问题,但它们都与同一件事有关,我希望有人能提供答案。
最佳答案
让我试着回答你的每一个问题
我应该如何正确创建自定义事件,以上是否正确?
然后我如何绑定(bind)到 View 模型中的“事件”
委托(delegate)指挥。您可以在您的
viewmodel 然后将其绑定(bind)到按钮的 Command 属性。那里
还有一些工具可以让你绑定(bind)事件,试试看
对于一些提供 EventToCommand
是否可以使用相同的事件方法将事件从一个 View 模型冒泡到另一个 View 模型(例如,我有 ShellViewModel,它最初加载一个 LoginViewMode(UserControl),然后加载一个 MainViewModel(UserControl),如果我有一个事件名为 Exit 的窗口可以让 ShellViewModel 订阅它并将其冒泡到加载的 View ,或者加载的 View 是否订阅窗口事件)
EventAggregator .这将允许您从
一个 View 模型并订阅另一个 View 模型。然后一旦
发布被调用,所有订阅者将被通知。
关于c# - mvvm 在自定义窗口中使用 viewmodel 绑定(bind)自定义事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32991511/