2010-08-20 23 views
6

Tôi muốn để ràng buộc một treeview để một lớp học như thế này một:treeview Multibinding trong WPF

public class Folder : Base_FileFolder 
{ 
    public Folder() 
    { 
     Folders = new ObservableCollection<Folder>(); 
     Files = new ObservableCollection<File>(); 
    } 
    public ObservableCollection<Folder> Folders { get; set; } 
    public ObservableCollection<File> Files { get; set; } 
} 

các lớp ares khác:

public class File : Base_FileFolder 
{ 
} 

public class Base_FileFolder : DependencyObject 
{ 
    public string Name 
    { 
     get { return (string)GetValue(NameProperty); } 
     set { SetValue(NameProperty, value); } 
    } 
    public static readonly DependencyProperty NameProperty = DependencyProperty.Register("Name", typeof(string), typeof(Base_FileFolder), new UIPropertyMetadata("")); 
} 

Làm thế nào tôi có thể tạo ra một treeview cho thấy Files and Folders bộ sưu tập

tôi muốn sử dụng một cái gì đó như thế này:

<HierarchicalDataTemplate 
DataType="{x:Type model:Folder}" 
ItemsSource="{Binding Childs}"> 
<DockPanel> 
     <Label Content="{Binding Name}"/> </DockPanel> 
</HierarchicalDataTemplate> 

vì vậy tôi có được somethign như thế này:

rootFolder

| 
|-File 
|-File 
|-Folder 
    |-File 
    |-File 
    |-Folder 
    |-File 
+1

Đây chính là vấn đề chính xác mà tôi gặp phải khi tôi muốn điền vào một khung nhìn tre với mọi thuộc tính của mọi phần tử trong XDocument, tôi có thể lặp lại các thuộc tính của một phần tử hoặc tất cả các phần tử, nhưng lặp lại tất cả các phần tử và tất cả thuộc tính trên mỗi yếu tố đã ném tôi cho một vòng lặp .. Đừng nhớ những gì tôi đã làm, nhưng nó lãng phí rất nhiều thời gian của tôi. –

Trả lời

2

gì chính xác là câu hỏi của bạn? Làm thế nào để kết hợp chúng? CompositeCollection.

CHỈNH SỬA: như đã đề cập trong các nhận xét, ứng dụng Intuipic của tôi thực hiện điều gì đó rất giống với những gì bạn đang yêu cầu. Dưới đây là một ảnh chụp màn hình:

alt text

+0

Đọc nó một lần nữa xin vui lòng tôi thêm một số văn bản thx – Delta

+0

Intuipic (http://intuipic.codeplex.com/) là một dự án tôi đã viết một trong khi trở lại mà thực hiện điều này. Bạn có thể muốn kiểm tra xem nó ra. –

+0

@KenBoogaart, thật sao? "Intuipic là một trình xem hình ảnh dễ sử dụng. Nó nhằm mục đích trực quan để sử dụng, và chức năng cùng một lúc." Điều đó nghe có vẻ không giống như câu hỏi. –

0

Bạn cần phải sử dụng Bạn sẽ cần 3 điều:

  1. một HierarchicalDataTemplate, như bạn có, để làm cha mẹ + trẻ em, và mẫu các thư mục. bạn MIGHT có thể sử dụng CompositeCollection ở đây để hợp nhất các thư mục + tệp, nhưng tôi không chắc chắn về điều đó ... bạn có thể phải thêm một thuộc tính khác vào lớp thư mục của bạn trả về kết hợp tệp và thư mục và gọi nó là " Trẻ em "hoặc bất cứ điều gì ...
  2. Một DataTemplate vào tệp mẫu trong cây
  3. Một TemplateSelector để nói cho cây chuyển đổi giữa các mẫu tùy thuộc vào mục trong cây. Thay vì thiết lập một ItemTemplate trên cây, thiết lập ItemTemplateSelector cho nó.
1

Điều này khá dễ dàng, xem xét chòm sao của bạn.

Đầu tiên: Điều chỉnh lớp học của bạn. Bạn không cần hai Danh sách riêng biệt cho các tệp và thư mục trong lớp thư mục. Chỉ cần sử dụng một IList<Base_FileFolder> bên trong lớp Base_FileFolder (OOP tốt) và gọi nó là Trẻ em!

Sau đó, bạn sẽ chỉ cần hai bước nữa:

  1. Hai HierarchicalDataTemplates

    <HierarchicalDataTemplate DataType="{x:Type FolderNode}" ItemsSource="{Binding Path=Children}"> 
        <Grid> 
         <TextBlock Text="{Binding FolderName}" /> 
        </Grid> 
    </HierarchicalDataTemplate> 
    
    <HierarchicalDataTemplate DataType="{x:Type FileNode}" ItemsSource="{Binding Path=Children}"> 
        <Grid> 
         <TextBlock Text="{Binding FileName}" /> 
        </Grid> 
    </HierarchicalDataTemplate> 
    
  2. Và một TreeView như thế này

    <TreeView Name="TreeViewFileTree" ItemsSource="{rootFolder.Children}" /> 
    

Vậy là xong. Sức mạnh của WPF là sự đơn giản của nó.