使用 Caliburn.Micro 时多个控件的相同方法
Same method for multiple controls when using Caliburn.Micro
在 WPF MVVM 应用程序中,我需要多个控件具有相同的功能 - 例如,某些按钮与某些菜单项执行相同的操作。使用 MVVM Light 的 RelayCommand 是小菜一碟,但我现在使用的是 Caliburn.Micro,其中几乎所有内容都基于约定。所以两个控件不能有相同的x:Name="AddItem"
,这是CM用来确定在ViewModel中执行的方法。有什么简单的方法可以解决这个问题吗?
是的,它很简单,但是很冗长。你需要使用"long format"。假设您的 ViewModel 上有一种方法 IncrementCount
:
// Handling event
public void IncrementCount()
{
Count++;
}
并且您的视图具有:
<Button Name="ButtonOne">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="IncrementCount" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button Name="ButtonTwo">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="IncrementCount" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
这两个按钮都会调用您的 IncrementCount
方法。
编辑
添加这些命名空间
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cal="http://www.caliburnproject.org"
您可能会使用上面的代码段看到此 Caliburn starting project。
在 WPF MVVM 应用程序中,我需要多个控件具有相同的功能 - 例如,某些按钮与某些菜单项执行相同的操作。使用 MVVM Light 的 RelayCommand 是小菜一碟,但我现在使用的是 Caliburn.Micro,其中几乎所有内容都基于约定。所以两个控件不能有相同的x:Name="AddItem"
,这是CM用来确定在ViewModel中执行的方法。有什么简单的方法可以解决这个问题吗?
是的,它很简单,但是很冗长。你需要使用"long format"。假设您的 ViewModel 上有一种方法 IncrementCount
:
// Handling event
public void IncrementCount()
{
Count++;
}
并且您的视图具有:
<Button Name="ButtonOne">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="IncrementCount" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button Name="ButtonTwo">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="IncrementCount" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
这两个按钮都会调用您的 IncrementCount
方法。
编辑
添加这些命名空间
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cal="http://www.caliburnproject.org"
您可能会使用上面的代码段看到此 Caliburn starting project。