使用 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