2011-01-31 127 views
0

比方說,我有這樣的事情:WPF的TreeView DataTemplate中

public class TopicFolder 
    { 
     #region Constants and Fields 

     private readonly List<TopicInfo> folderContent; 

     private readonly List<TopicFolder> subFolders; 

     #endregion 

... 
    } 

如何實現這種類型的數據模板?目前我有:

<HierarchicalDataTemplate DataType="{x:Type local:TopicFolder}" ItemsSource="{Binding SubFolders}" > 
      <TextBlock Text="{Binding Name}"/> 
     </HierarchicalDataTemplate> 
     <HierarchicalDataTemplate DataType="{x:Type local:TopicInfo}" ItemsSource="{Binding FolderContent}"> 
      <TextBlock Text="{Binding TopicName}"/> 
     </HierarchicalDataTemplate> 

但是這並不顯示任何文件夾內容。看起來第二個模板的DataType應該是本地的:TopicFolder,但這是WPF不允許的。

有什麼建議嗎?

UPD:TreeView控件綁定到的ObservableCollection < TopicFolder>是這樣的:

ItemsSource="{Binding Path=Folders}" 

P.S:這絕對不是一個私人/公共/性能問題。我擁有相應的公開屬性。輸出中沒有綁定錯誤,它只是不顯示任何FolderContent項目。

+0

究竟是什麼您的錯誤信息? – 2011-01-31 17:12:11

+0

並不會錯過封裝私有字段的屬性? – 2011-01-31 17:13:21

回答

1

編輯:

要顯示兩個子文件夾和內容的一個可以使用一個MultiBinding或者,如果你不介意的文件夾和內容可以按照一定的順序,我建議使用composite pattern出現,因爲您可以刪除SubFolders和FolderContent,並將其替換爲實現複合接口的對象集合(請閱讀wiki文章)。

創建一個屬性來合併兩個集合,所以你可以綁定到它,這是不好的做法。

例複合模式:

public interface ITopicComposite 
{ 
    // <Methods and properties folder and content have in common (e.g. a title)> 

    // They should be meaningful so you can just pick a child 
    // out of a folder and for example use a method without the 
    // need to check if it's another folder or some content. 
} 

public class TopicFolder : ITopicComposite 
{ 
    private readonly ObservableCollection<ITopicComposite> children = new ObservableCollection<ITopicComposite>(); 
    public ObservableCollection<ITopicComposite> Children 
    { 
     get { return children; } 
    } 

    //... 
} 

public class TopicInfo : ITopicComposite 
{ 
    //... 
}