C# mvvm使用viewmodel在自定义窗口中绑定自定义事件
我有一个我希望找到解决方案的场景,我有一个自定义的C# mvvm使用viewmodel在自定义窗口中绑定自定义事件,c#,wpf,xaml,mvvm,caliburn.micro,C#,Wpf,Xaml,Mvvm,Caliburn.micro,我有一个我希望找到解决方案的场景,我有一个自定义的窗口类,我创建了一个事件,如下所示(为了简洁起见,我删除了一些代码) 我将MVVM与Calibutn.Micro一起使用,我有一个ShellViewModel和ShellView(ShellView继承自AeroWindow) 我想知道的是: 我应该如何正确地创建自定义事件,上述是否正确 然后如何绑定到视图模型中的“事件” 是否可以使用相同的事件方法将事件从一个视图模型冒泡到另一个视图模型(例如,我有一个ShellViewModel,它最初加载
窗口
类,我创建了一个事件,如下所示(为了简洁起见,我删除了一些代码)
我将MVVM与Calibutn.Micro一起使用,我有一个ShellViewModel和ShellView(ShellView继承自AeroWindow)
我想知道的是:
- 我应该如何正确地创建自定义事件,上述是否正确
- 然后如何绑定到视图模型中的“事件”
- 是否可以使用相同的事件方法将事件从一个视图模型冒泡到另一个视图模型(例如,我有一个ShellViewModel,它最初加载一个LoginViewMode(UserControl),然后再加载一个MainViewModel(UserControl),如果窗口上有一个名为
的事件,ShellViewModel是否可以订阅该事件并将其冒泡到加载的视图,或者加载的视图是否应该订阅窗口事件)Exit
我知道有很多问题,但它们都与同一件事有关,我希望有人能提供答案。让我试着回答你的每个问题 如何正确创建自定义事件,上述是否正确?
- 我认为您上面所做的是正确的,或者您可以像往常一样添加事件处理程序
- 如果您谈论的是自定义事件,您将在其中创建自己的事件,而不是类的内置事件,那么您实际上可以在类中创建一个自定义事件
- 我认为您不想绑定事件,您要做的是绑定命令。您可以尝试阅读有关ICommand、Relaycommand、, 授权命令。可以在中创建ICommand属性 viewmodel然后将其绑定到按钮的命令属性。那里 还有一些工具允许您绑定到事件,请尝试查看 对于某些提供EventToCommand的库
- 在这个场景中,如果涉及到两个viewmodel,因为您使用的是caliburn.micro,您可能需要检查
. 这将允许您发布来自
一个viewmodel并订阅另一个viewmodel。然后,一旦 如果调用publish,将通知所有订户 - 我认为您上面所做的是正确的,或者您可以像往常一样添加事件处理程序
- 如果您谈论的是自定义事件,您将在其中创建自己的事件,而不是类的内置事件,那么您实际上可以在类中创建一个自定义事件
- 我认为您不想绑定事件,您要做的是绑定命令。您可以尝试阅读有关ICommand、Relaycommand、, 授权命令。可以在中创建ICommand属性 viewmodel然后将其绑定到按钮的命令属性。那里 还有一些工具允许您绑定到事件,请尝试查看 对于某些提供EventToCommand的库
- 在这个场景中,如果涉及到两个viewmodel,因为您使用的是caliburn.micro,您可能需要检查
. 这将允许您发布来自
一个viewmodel并订阅另一个viewmodel。然后,一旦 如果调用publish,将通知所有订户
- 让我试着回答你的每一个问题
如何正确创建自定义事件,上述是否正确?
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);
}
}
}