【问题标题】:TreeView SelectedItemChanged not firing CommandTreeView SelectedItemChanged 未触发命令
【发布时间】:2012-09-08 00:47:27
【问题描述】:

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

我有一个 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
    }
}

然而我的命令从未被触发。我做错了什么?

【问题讨论】:

  • 这可能与 FolderChangedCommand 是私有的有关吗?我怀疑它应该是公开的。

标签: c# wpf mvvm prism


【解决方案1】:

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

您用作绑定源属性的属性必须 成为您班级的公共财产。明确定义的接口 不能出于绑定目的访问属性,也不能受保护, 没有基础的私有、内部或虚拟属性 实施

但是你的命令是private 所以把它改成:

public DelegateCommand FolderChangedCommand { get; set; }

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

【讨论】:

    猜你喜欢
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多