2016-03-24 5 views
0

Обновление см. Simplifying the WPF TreeView ... для понимания этой реализации.Что не так с этим связыванием TreeView и Иерархических данных?

Снизу:

  • основы (реферат) класс Folder в AssemblyA
  • подкласс Folder s в AssemblyB: BuildFolder, Solution, Project
  • TreeView в AssemblyC пытается привязать к иерархической папке Структура

У меня есть модель модели ProjectExplorerVM, который инкапсулирует BuildItemVM. BuildItemVM итерацию вложенная структура Folder с:

public event PropertyChangedEventHandler PropertyChanged; 

public ObservableCollection<BuildItemVM> Folders { 
    get { return folders; } 
} 

#region constructor 
public BuildItemVM(Build Build) : this(Build.RootFolder, null) { 
    Name = Build.Name; 
} 

private BuildItemVM(Folder childFolder, BuildItemVM parentFolder) { 
    folderItem = childFolder; 
    parentItem = parentFolder; 
    Name = folderItem.Name; 

    folders = new ObservableCollection<BuildItemVM>(childFolder.Folders 
     .Select(f => new BuildItemVM(f, this))); 
    folders.CollectionChanged += FoldersCollectionChanged; 
} 
#endregion 

ProjectExplorerVM выглядит следующим образом:

#region properties 

    public event PropertyChangedEventHandler PropertyChanged; 


    public ReadOnlyCollection<BuildItemVM> RootItems { 
     get; 
     private set; 
    } 
    #endregion 


    #region constructor 
    public ProjectExplorerVM(Build BuildProject) { 
     build = BuildProject; 
     buildItemVM = new BuildItemVM(build); 

     buildItemVM.Folders.CollectionChanged += FoldersCollectionChanged; 

     RootItems = new ReadOnlyCollection<BuildItemVM>(new BuildItemVM[] { buildItemVM }); 
    } 
    #endregion 

... хорошо, так что я пробовал много разных вещей, которые я нашел на машине Google , Вот что у меня есть для моих попыток привязки в XAML:

<TreeView Name="BuildTree" 
       HorizontalAlignment="Stretch" 
       VerticalAlignment="Stretch"> 
     <TreeView.Resources> 
      <build:BuildFolder x:Key="FolderList"/> 

      <HierarchicalDataTemplate DataType="{x:Type build:BuildFolder}" 
             ItemsSource="{Binding Path=Folders}"> 
       <TextBlock Text="{Binding Path=Name}"/> 
      </HierarchicalDataTemplate> 
      <HierarchicalDataTemplate DataType="{x:Type build:Project}" 
             ItemsSource="{Binding Path=Folders}"> 
       <TextBlock Text="{Binding Path=Name}"/> 
      </HierarchicalDataTemplate> 
      <HierarchicalDataTemplate DataType="{x:Type build:Solution}" 
             ItemsSource="{Binding Path=Folders}"> 
       <TextBlock Text="{Binding Path=Name}"/> 
      </HierarchicalDataTemplate> 
     </TreeView.Resources> 
     <TreeView.ItemContainerStyle> 
      <Style TargetType="{x:Type TreeViewItem}"> 
       <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> 
       <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> 
       <Setter Property="FontWeight" Value="Normal" /> 
       <Style.Triggers> 
        <Trigger Property="IsSelected" Value="True"> 
         <Setter Property="FontWeight" Value="Bold" /> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </TreeView.ItemContainerStyle> 
     <TreeViewItem ItemsSource="{Binding Source={StaticResource FolderList}}"/> 
    </TreeView> 

В элементе управления TreeView не отображаются узлы. Что не так с моей привязкой?

+1

В чем проблема? –

+0

Простой комментарий привлечет мое внимание ... не требовал пониженного голосования. :) – IAbstract

+0

Не был ли я, я не это имею в виду;) –

ответ

0

Оказывается, я использовал неправильное имя свойства в привязке. Поэтому я отправляю правильную привязку (Xaml):

   <TreeView Name="BuildTree" 
          ItemsSource="{Binding RootItems}"> 
        <TreeView.ItemContainerStyle> 
         <Style TargetType="{x:Type TreeViewItem}"> 
          <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> 
          <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> 
          <Setter Property="FontWeight" Value="Normal" /> 
          <Style.Triggers> 
           <Trigger Property="IsSelected" Value="True"> 
            <Setter Property="FontWeight" Value="Bold" /> 
           </Trigger> 
          </Style.Triggers> 
         </Style> 
        </TreeView.ItemContainerStyle> 

        <TreeView.ItemTemplate> 
         <HierarchicalDataTemplate ItemsSource="{Binding Folders}"> 
          <TextBlock Text="{Binding Name}" /> 
         </HierarchicalDataTemplate> 
        </TreeView.ItemTemplate> 
       </TreeView> 
Смежные вопросы