在xaml中将函数绑定到MouseDown事件?

问题描述 投票:0回答:1

我目前正在学习 WPF 和 C# 编程,但我在理解绑定等方面遇到了困难。

我陷入了将函数或命令“绑定”到网格中的 XAML 对象的困境。

<Image x:Name="BlkRook1" Source="../Data/BlkRook.png" Grid.Row="{Binding Path=ChessPieces[0].Row}" Grid.Column="{Binding Path=ChessPieces[0].Column}" MouseDown="{Binding Path=ChessPieces[0].Move()}"/>

代码

MouseDown="{Binding Path=ChessPieces[0].Move()}"
不起作用,但显示我试图实现的目标

在我的视图模型中,我定义了一个列表,其中填充了不同棋子的实例,然后我计划将每个图像绑定到该列表中的实例。

我目前正在尝试绑定 MouseDown 函数,似乎如果我将该函数放在 Mainwindow.xaml.cs 文件中,它就可以访问它。但我希望它能够从模型访问它

Mainwindow.xaml.cs

namespace TheGame.Views
{
    public partial class MainWindow : Window   
    {
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = new ChessBoardViewModel();
        }

    }
}

BlkRook 对象目前已经定义了 Row、column、name 和 move 函数。

错误信息:

“'TheGame.Views.MainWindow'不包含'Move'的定义,并且找不到接受'TheGame.Views.MainWindow'类型的第一个参数的扩展方法'Move'(您是否缺少using指令或装配参考?)”

那么..如何将模型对象中定义的函数绑定到 XAML 对象?

谢谢

/马丁

c# wpf xaml mvvm
1个回答
20
投票

您无法绑定到方法。您正在使用 MVVM,因此我建议您将附加属性与命令结合使用。您还可以使用 MouseBinding 类:http://msdn.microsoft.com/en-us/library/system.windows.input.mousebinding(v=vs.110).aspx命令绑定在这里解释得很好:http://www.danharman.net/2011/08/05/binding-wpf-events-to-mvvm-viewmodel-commands/

<Button>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="MouseDown" >
            <i:InvokeCommandAction Command="{Binding MouseDownCommand}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>
© www.soinside.com 2019 - 2024. All rights reserved.