2015-09-14 6 views
0

I имеют следующие две модели-классы:TreeView отображения иерархических данных

public class FileItem : NotifyBase 
{ 
    public FileItem(string fullPath) 
    { 
     FullPath = fullPath; 
    } 

    public string FullPath 
    { 
     get { return Get<string>(); } 
     set 
     { 
      Set(value); 
      OnPropertyChanged("FileName"); 
      OnPropertyChanged("Directory"); 
     } 
    } 

    public string Directory 
    { 
     get { return Path.GetDirectoryName(FullPath); } 
    } 

    public string FileName 
    { 
     get { return Path.GetFileName(FullPath); } 
    } 
} 

и

public class Directory : NotifyBase 
{ 
    public Directory(string fullPath) 
    { 
     FullPath = fullPath; 
     Files = new ObservableCollection<FileItem>(); 
     Directories = new ObservableCollection<Directory>(); 
    } 

    public ObservableCollection<FileItem> Files 
    { 
     get { return Get<ObservableCollection<FileItem>>(); } 
     set { Set(value); } 
    } 

    public ObservableCollection<Directory> Directories 
    { 
     get { return Get<ObservableCollection<Directory>>(); } 
     set { Set(value); } 
    } 

    public string FullPath 
    { 
     get { return Get<string>(); } 
     set 
     { 
      Set(value); 
      OnPropertyChanged("DirectoryName"); 
     } 
    } 

    public string DirectoryName 
    { 
     get 
     { 
      string[] directoryNameSplit = FullPath.Split(new[] { "\\" }, StringSplitOptions.RemoveEmptyEntries); 
      if (directoryNameSplit.Length > 0) 
      { 
       return directoryNameSplit[directoryNameSplit.Length - 1]; 
      } 
      return "UNKNOWN"; 
     } 
    } 
} 

Класс, NotifyBase только реализация INotifyPropertyChanged.

Загружаю данные из файловой системы, и поэтому у меня есть иерархия объектов. Теперь я хочу отобразить эту иерархию Directory s и FileItem s в виде как TreeView.

В ViewModel у меня есть ObservableCollection<Directory>, называемый каталогами с корневыми узлами.

на мой взгляд:

<TreeView Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Margin="5" x:Name="tv" 
      ItemsSource="{Binding Directories, UpdateSourceTrigger=PropertyChanged}"> 
    <TreeView.Resources> 
     <HierarchicalDataTemplate DataType="{x:Type model:Directory}" ItemsSource="{Binding Directories}"> 
      <Label Content="{Binding Path=DirectoryName}" VerticalAlignment="Center"/> 
     </HierarchicalDataTemplate> 

     <DataTemplate DataType="{x:Type model:FileItem}"> 
      <Label Content="{Binding FileName}" VerticalAlignment="Center" Background="Red"/> 
     </DataTemplate> 
    </TreeView.Resources> 
</TreeView> 

Все папки отображаются идеально, но я не вижу никаких FileItem с и я не знаю, почему. Что я здесь делаю неправильно?

ответ

0

Поскольку у вас есть ваши две коллекции отдельно, и вы не привязываетесь к Files в любом месте.

Вместо двух коллекций, есть одна коллекция двух типов.

+0

Мне нужна эта структура для представления глубокой иерархии каталогов. Или как бы вы решили это? – Tomtom

Смежные вопросы