2012-08-28 125 views
1

我對MVVM和WPF比較陌生。我試圖填補目錄的TreeView控件,它的文件/子目錄MVVM中Treeview的HierarchicalDataTemplate

(實際上,我解開一個壓縮文件中的內容),沿着這條SO question後,我有下面的類以下:

namespace IFR_Full.Model 
{ 
    public class Item 
    { 
     public string Name { get; set; } 
     public string Path { get; set; } 
    } 

    public class FileItem : Item 
    { 
    } 

    public class DirectoryItem : Item 
    { 
     public List<Item> Items { get; set; } 

     public DirectoryItem() 
     { 
      Items = new List<Item>(); 
     } 
    } 

    public class TVItemProvider 
    { 
     public List<Item> GetItems(string path) 
     { 
      var items = new List<Item>(); 
      var dirInfo = new DirectoryInfo(path); 

      foreach (var directory in dirInfo.GetDirectories()) 
      { 
       var item = new DirectoryItem 
        { 
         Name = directory.Name, 
         Path = directory.FullName, 
         Items = GetItems(directory.FullName) 
        }; 
       items.Add(item); 
      } 

      foreach (var file in dirInfo.GetFiles()) 
      { 
       var item = new FileItem 
       { 
        Name = file.Name, 
        Path = file.FullName 
       }; 
       items.Add(item); 
      } 
      return items; 
     } 
    } 
} 

在我的ViewModel類我有這些屬性:

TVItemProvider TVIP = new TVItemProvider(); 

private List<Item> _tvitems; 
public List<Item> TVItems 
{ 
    get { return _tvitems; } 
} 

這是在此方法創建:

private void LoadIDMLTreeView(string path) 
{ 
    _tvitems = TVIP.GetItems(path); 
} 

設置我的主窗口的像這樣的標題和的DataContext:

... 
xmlns:ViewModel="clr-namespace:IFR_Full" 
xmlns:Model ="clr-namespace:IFR_Full.Model" 
... 

<Window.DataContext> 
    <ViewModel:ExcelImportViewModel/> 
</Window.DataContext> 

,並設置我的樹視圖的XAML代碼:

<TreeView ItemsSource="{Binding}" Name="IDMLView" Margin="10,171.74,10,8" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"> 
    <TreeView.Resources> 
     <HierarchicalDataTemplate DataType="{x:Type Model:DirectoryItem}" ItemsSource="{Binding Path=TVItems}"> 
      <TextBlock Text="{Binding Path=Name}" ToolTip="{Binding Path=Path}" />     
     </HierarchicalDataTemplate> 
     <DataTemplate DataType="{x:Type Model:FileItem}"> 
    <TextBlock Text="{Binding Path=Name}" ToolTip="{Binding Path=Path}" /> 
    </DataTemplate>    
</TreeView.Resources> 
</TreeView> 

當我在調試模式下運行程序,我可以看到該TVItems包含適當的項目(目錄和文件),但我的TreeView控件是空白的。

我想這個問題是與綁定?

回答

1
  • 變化<TreeView ItemsSource="{Binding}" ...<TreeView ItemsSource="{Binding TVItems}" ...
  • 此外,更改爲<HierarchicalDataTemplate DataType="{x:Type local:DirectoryItem}" ItemsSource="{Binding Items}" >
  • 你的類必須是這樣的:

    public class TVItemProvider 
        { 
    
         List<object> items = new List<object>(); 
          DirectoryInfo dirInfo; 
          public List<object> GetItems(string path) 
         { 
          dirInfo = new DirectoryInfo(path); 
          foreach (var directory in dirInfo.GetDirectories()) 
          { 
           var item = new DirectoryItem 
           { 
            Name = directory.Name, 
            Path = directory.FullName, 
            Items = new TVItemProvider().GetItems(directory.FullName) 
           }; 
           items.Add(item); 
          } 
    
          foreach (var file in dirInfo.GetFiles()) 
          { 
           var item = new FileItem 
           { 
            Name = file.Name, 
            Path = file.FullName 
           }; 
    
           items.Add(item); 
          } 
          return items; 
         } 
    

    }

  • 最後更改的類型您的名單到List<object>(所有的)
    希望這將有助於

+0

當我做出這個改變樹形視圖只與頂級項目填補。我期待一個樹結構:DirectoryItems有FileItem subs。 – DeeDub84

+0

我再次更新了我的答案 – HichemSeeSharp

+0

優秀HichemC!這工作...現在我需要研究答案,以瞭解你做了什麼! – DeeDub84

相關問題