首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用视图模型绑定自定义窗口中的自定义事件

用视图模型绑定自定义窗口中的自定义事件
EN

Stack Overflow用户
提问于 2015-10-07 11:52:30
回答 1查看 1.2K关注 0票数 1

我有下面的场景,我希望找到一个解决方案,我有一个定制的Window类,我创建了一个事件,如下所示(为了简洁起见,我已经删除了一些代码)

代码语言:javascript
复制
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);
        }
    }
}

我在Calibutn.Micro中使用MVVM,我有一个ShellViewModel和ShellView ( ShellView继承自AeroWindow)。

我想知道的是:

  • 如何正确创建自定义事件,以上是否正确?
  • 然后如何绑定到视图模型中所说的“事件”
  • 是否可以使用相同的事件方法将事件从一个视图模型泡到另一个视图模型(例如,我的ShellViewModel最初加载LoginViewMode (UserControl),然后加载MainViewModel (UserControl),如果窗口上有一个名为Exit的事件,ShellViewModel可以订阅该事件并将其泡到已加载的视图,或者加载的视图应该订阅窗口事件)

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

EN

回答 1

Stack Overflow用户

发布于 2015-10-07 13:31:50

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

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

然后如何绑定到视图模型中所说的“事件”

  • 我认为您不想绑定事件,您要做的是绑定命令。您可以尝试阅读有关ICommand、Relaycommand、DelegateCommand的内容。可以在视图模型中创建ICommand属性,然后将其绑定到按钮的Command属性。还有一些工具允许您绑定到事件,请尝试查找一些提供EventToCommand的库。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32991511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档