WPF中TreeView控件SelectedItemChanged方法的MVVM綁定


問題描述:左側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>
XAML代碼

注:需要引用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",其他都不變。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM