MVVM綁定多層級數據到TreeView並設置項目展開


昨天在做項目的時候碰到了這個問題,發現通常我們定義的數據不法綁定到控件上,接下來我將講一下我是怎么解決這個問題的。

要用MVVM模式在程序中將層級數據綁定到TreeView上,通常我們定義的數據是形如文件夾和文件的結構,如:

folder-

  file1

  folder1-

    file2

    folder2-

這樣的數據,我們一般定義的類如下

 1 public class Folder
 2 {
 3     public string Name{set;get;}
 4     public IList<Folder> Folders{set;get;}
 5     public IList<File> Files{set;get;}
 6 }
 7 
 8 public class File
 9 {
10    public string Name{set;get;}
11 }

而在XAML中直接用兩個DataType類型為Folder和File的HierarchicalDataTemplate表示Folders和Files,這樣顯示出來的數據不能完整按照我們的意圖的顯示出來。顯示結果為

folder-

  folder1

結果只顯示了文件Folder信息。

怎么解決這個問題呢?

 1 public IList<object> Items
 2 {
 3     get{
 4         IList<object> items = new List<object>();
 5         foreach(var fo in this.Folders)
 6        items.Add(fo);
 7        foreach(var f in this.Files)
 8        items.Add(f);   
 9         return items;
10     } 
11 }

我們在Folder類中定義這個Items屬性,接下來就是XAML部分

View Code
1  <HierarchicalDataTemplate DataType="{x:Type Model:Folder}"  ItemsSource="{Binding Items}">
2         <TextBlock Text="{Binding Name}"  />
3  </HierarchicalDataTemplate>
4  <DataTemplate DataType="{x:Type Model:File}">
5       <TextBlock Text="{Binding Name}"  />
6  </DataTemplate>

這樣就完美的解決了這個問題,看來多層級數據,XAML中只能解析為單屬性遞歸。

數據綁定做完后,我還想在一開始加載就屏開TreeView中的所有項,其實這個只需要設置一下ItemContainerStyle的Style就可以了,如下

<TreeView.ItemContainerStyle>
       <Style TargetType="{x:Type TreeViewItem}">
              <Setter Property="IsExpanded" Value="True" />
        </Style>
</TreeView.ItemContainerStyle>

大家還有更好的辦法綁定多層級數據嗎?


免責聲明!

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



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