MVVM绑定自定义事件在自定义窗口与viewmodel



我有以下场景,我希望找到一个解决方案,我有一个自定义的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。微和我有一个ShellViewModel和ShellView (ShellView继承自AeroWindow)

我想知道的是:

  • 我应该如何正确地创建自定义事件,是上述正确的吗?
  • 如何在视图模型中绑定"事件"呢
  • 事件的相同方法可用于从一个视图模型到另一个气泡事件(例如,我有ShellViewModel,最初加载LoginViewMode (UserControl),并反过来加载MainViewModel (UserControl),如果我有一个事件的窗口称为Exit可以ShellViewModel订阅,并将其泡到加载视图或加载视图订阅窗口事件)

我知道这是许多问题,但它们都与同一件事有关,我希望有人能提供一个答案。

让我试着回答你的每一个问题

我应该如何正确地创建自定义事件,是上述正确的吗?

  • 我认为你上面做的是正确的,或者你可以像往常一样添加一个事件处理程序。
  • 如果你说的是自定义事件,除了类的内置事件之外,你还可以创建自己的事件,你可以在你的类中创建一个委托和一个事件。

如何绑定到视图模型中的事件

  • 我不认为你想绑定事件,你想做的是绑定命令。你可以尝试阅读iccommand, Relaycommand,DelegateCommand。类中创建一个iccommand属性viewmodel然后将其绑定到按钮的Command属性。在那里还有一些工具可以让你绑定到事件,试着看看对于一些提供EventToCommand的库

事件的相同方法可用于从一个视图模型到另一个气泡事件(例如,我有ShellViewModel,最初加载LoginViewMode (UserControl),并依次加载MainViewModel (UserControl),如果我有一个窗口上的事件称为Exit可以ShellViewModel订阅,并将其泡到加载视图或应该加载视图订阅窗口事件)

  • 在这个场景中,涉及到两个视图模型,因为您使用的是calibre。Micro,你可能想检查一下
    EventAggregator。这将允许您从
    发布事件。一个视图模型和另一个视图模型的订阅。然后一旦

相关内容

  • 没有找到相关文章

最新更新