Wpf 使用Caliburn.Micro时,对多个控件使用相同的方法

Wpf 使用Caliburn.Micro时,对多个控件使用相同的方法,wpf,mvvm,mvvm-light,caliburn.micro,relaycommand,Wpf,Mvvm,Mvvm Light,Caliburn.micro,Relaycommand,在WPF MVVM应用程序中,我需要为多个控件提供相同的功能—例如,某些按钮和某些菜单项做相同的事情。MVVM Light的RelayCommand是小菜一碟,但我现在使用的是Caliburn.Micro,几乎所有东西都是基于约定的。因此,两个控件不能具有相同的x:Name=“AddItem”,CM使用该控件来确定在ViewModel中执行的方法。有什么简单的方法可以解决这个问题吗?是的,很简单,但很冗长。您需要使用“长格式”。假设您在ViewModel上有一种方法IncrementCount:

在WPF MVVM应用程序中,我需要为多个控件提供相同的功能—例如,某些按钮和某些菜单项做相同的事情。MVVM Light的RelayCommand是小菜一碟,但我现在使用的是Caliburn.Micro,几乎所有东西都是基于约定的。因此,两个控件不能具有相同的
x:Name=“AddItem”
,CM使用该控件来确定在ViewModel中执行的方法。有什么简单的方法可以解决这个问题吗?

是的,很简单,但很冗长。您需要使用“长格式”。假设您在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>

您可以使用上面的代码片段看到这一点。

请确保不要命名它们,并正常绑定您需要的内容。。。使用
cal:Message.Attach=“YourMethod()”
调用绑定到当前Datacontext的viewmodel上的方法。由于visualtree的限制,上下文菜单可能会变得棘手。
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cal="http://www.caliburnproject.org"