問題描述:左側treeview控件中點擊不同類別的節點時,右側的頁面會顯示不同的權限。比如對於My Publications,擁有Modify和Delete兩種權限,對於My Subscriptions,只擁有Unsubscribe的權限。
我想到的辦法是將權限綁定到TreeView控件的SelectedItemChanged方法,也就是說點擊My Publications下面的子節點時,Modify和Delete兩個Button控件是可見的,點擊My Subscriptions下面的子節點時,Unsubscribe這個Button控件是可見的。
對於SelectedItemChanged使用MVVM綁定,使用到了System.Windows.Interactivity程序集。

<TreeView Name="treeview" Grid.Column="0" ItemsSource="{Binding Path=Resources}"> <i:Interaction.Triggers> <i:EventTrigger EventName="SelectedItemChanged"> <i:InvokeCommandAction Command="{Binding Path=SelectedItemChangedCommand}" CommandParameter="{Binding ElementName=treeview, Path=SelectedItem}"/> </i:EventTrigger> </i:Interaction.Triggers> <TreeView.ItemTemplate> <HierarchicalDataTemplate DataType="{x:Type local:TreeNode}" ItemsSource="{Binding Path=ChildNodes}"> <Label Content="{Binding Path=NodeName}"/> </HierarchicalDataTemplate> </TreeView.ItemTemplate> </TreeView>
注:需要引用System.Windows.Interactivity程序集
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
將SelectedItemChanged綁定到了SelectedItemChangedCommand方法,且傳遞的方法參數是treeview的SelectedItem。
注:為了讓界面看起來更漂亮,我使用了MahApps.Metro,不知道為什么,在引用System.Windows.Interactivity程序集時,先引用的4.0版本,但是沒有辦法加載進來。后來改成了3.5版本,可以成功加載,但是其中沒有Command屬性,后又改成4.0版本,竟然可以成功加載了。
如果有更好的實現方法,請一定告訴我,謝謝~
2021.8.26補充,最近在做一個.net core wpf項目,用不了System.Windows.Interactivity程序集,需要安裝Microsoft.Xaml.Behaviors.Wpf包,然后引用xmlns:i="http://schemas.microsoft.com/xaml/behaviors",其他都不變。