在WPF MVVM应用程序中,我需要多个控件的相同功能 - 例如某些按钮与某些菜单项相同。它与MVVM Light的RelayCommand是小菜一碟,但我现在使用Caliburn.Micro,几乎所有东西都基于惯例。因此,两个控件不能具有相同的x:Name="AddItem"
,CM使用它来确定在ViewModel中执行的方法。有没有简单方法来解决这个问题?
答案 0 :(得分:3)
是的,它很简单,但很冗长。您需要使用"长格式"。我们假设您的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"
您可以使用上面的代码段看到starting project。