2

尽管搜索了以前提出的相同性质的问题,并找到了很多,但我仍然很难理解为什么这对我不起作用。

我有一个 TreeView -

<Window ... xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity">
    <TreeView Name="Folders" ItemsSource="{Binding Directories}">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="SelectedItemChanged">
                <i:InvokeCommandAction Command="{Binding FolderChangedCommand}" />
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </TreeView>
</Window>

我正在尝试将 SelectedItemChanged 事件绑定到我的 ViewModel 中的命令 -

using Microsoft.Practices.Prism.Commands;

internal class MainVM : VMBase
{
    private DelegateCommand FolderChangedCommand { get; set; }

    public MainVM()
    {
        FolderChangedCommand = new DelegateCommand(FolderChanged);
    }

    private void FolderChanged()
    {
        // Do Stuff
    }
}

然而我的命令从未被解雇过。我究竟做错了什么?

4

1 回答 1

2

数据绑定引擎需要public属性作为绑定源

用作绑定的绑定源属性的属性必须是类的公共属性。无法访问显式定义的接口属性以进行绑定,也不能访问没有基本实现的受保护、私有、内部或虚拟属性

但是您的命令是private如此更改为:

public DelegateCommand FolderChangedCommand { get; set; }

并确保您MainVM正确设置为DataContext您的窗口。您可以在本文中找到有关调试数据绑定的更多信息。

于 2012-09-08T07:12:22.660 回答