2012-09-08 27 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中找到有關調試數據綁定的更多信息。