首页 > 解决方案 > 将 UI 元素单击连接到 ViewModel 方法?

问题描述

使用Caliburn.Micro,我可以创建一个按钮,使其在我的 ViewModel 中触发一个方法,而无需实际声明任何 ICommand 属性。

MyView.xaml

<UserControl [...]>
    <Button x:Name="Foo" />
</UserControl>

MyViewModel.cs

public class MyViewModel : PropertyChangedBase
{
    public void Foo()
    {
        MessageBox.Show("Hello world");
    }
}

如果不使用代码隐藏——我可以用网格做类似的事情吗?还是任何其他 UI 元素?也就是说,当单击特定的 UI 元素时,执行 ViewModel 上的方法,而无需声明任何 ICommand 属性?

我试过这样的语法,但似乎什么也没发生。

<UserControl [...]>
    <Border cal:Message.Attach="[Event Click] = [Action Foo()]">
        <TextBlock Text="Click Me" />
    </Border>
</UserControl>

标签: c#.netwpfxamlcaliburn.micro

解决方案


ABorder没有任何Click事件,但您可以处理它的PreviewMouseLeftButtonDown事件:

<Border cal:Message.Attach="[Event PreviewMouseLeftButtonDown] = [Action Foo()]">
    <TextBlock Text="Click Me" />
</Border>

推荐阅读