2012-09-08 29 views
2

尽管先前询问过同一性质的问题,并发现了很多问题,但我仍然难以理解为什么这不适用于我。TreeView SelectedItemChanged not firing命令

我有一个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事件的命令绑定 -

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 
    } 
} 

然而,我命令从来没有发射。我究竟做错了什么?

+2

可能是因为FolderChangedCommand是私人的吗?我怀疑它应该是公开的。 –

回答

2

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

属性您使用的绑定源属性的绑定必须 是你的类的公共属性。明确定义的接口 属性不能用于绑定的目的来访问,也不能保护, 有没有基础 实施

专用内部,或虚拟属性,但你的命令是private所以将其更改为:

public DelegateCommand FolderChangedCommand { get; set; } 

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