2016-03-24 3 views
0

更新Simplifying the WPF TreeView ...を参照してください。このTreeViewとHierarchicalデータバインドで何が問題になっていますか?

  • ベースAssemblyA中(抽象)クラスFolder
  • サブクラスAssemblyBでFolder S:下から

    BuildFolderSolutionProject AssemblyCでツリービューは、階層フォルダにバインドしようとしている
  • 構造

私はビューモデルを持っています3230はBuildItemVMをカプセル化します。 BuildItemVM反復しFolder秒の入れ子構造:大丈夫...

#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のマシン上で見つけた、多くの異なるものを試してみた:次のように

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です。ここで私は、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> 
関連する問題