gpt4 book ai didi

c# - mvvm 在自定义窗口中使用 viewmodel 绑定(bind)自定义事件

转载 作者:行者123 更新时间:2023-12-03 10:44:31 29 4
gpt4 key购买 nike

我有以下情况,我希望找到解决方案,我有一个自定义 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)

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

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

    最佳答案

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

    我应该如何正确创建自定义事件,以上是否正确?

  • 我认为您在上面所做的是正确的,或者您可以像往常一样添加事件处理程序。
  • 如果您正在谈论自定义事件,除了类的内置事件之外,您将创建自己的事件,您实际上可以这样做,只需创建一个 delegate and an event在你的类(class)内。

  • 然后我如何绑定(bind)到 View 模型中的“事件”
  • 我不认为你想绑定(bind)事件,你想做的是绑定(bind)命令。您可以尝试阅读有关 ICommand、Relaycommand、
    委托(delegate)指挥。您可以在您的
    viewmodel 然后将其绑定(bind)到按钮的 Command 属性。那里
    还有一些工具可以让你绑定(bind)事件,试试看
    对于一些提供 EventToCommand
  • 的库

    是否可以使用相同的事件方法将事件从一个 View 模型冒泡到另一个 View 模型(例如,我有 ShellViewModel,它最初加载一个 LoginViewMode(UserControl),然后加载一个 MainViewModel(UserControl),如果我有一个事件名为 Exit 的窗口可以让 ShellViewModel 订阅它并将其冒泡到加载的 View ,或者加载的 View 是否订阅窗口事件)
  • 在这种情况下,涉及两个 View 模型,因为您使用的是 caliburn.micro,您可能需要检查
    EventAggregator .这将允许您从
    一个 View 模型并订阅另一个 View 模型。然后一旦
    发布被调用,所有订阅者将被通知。
  • 关于c# - mvvm 在自定义窗口中使用 viewmodel 绑定(bind)自定义事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32991511/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com