سؤال

أريد ربط TreeView بفصل مثل هذا:

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; }
}

الفصول الأخرى آريس:

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(""));
}

كيف يمكنني إنشاء مجموعة TreeView التي تعرض مجموعة الملفات والمجلدات

أريد استخدام شيء مثل هذا:

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

لذلك أحصل على شيء مثل هذا:

المجلد الرئيسي

|
|-File
|-File
|-Folder
  |-File
  |-File
  |-Folder
    |-File
هل كانت مفيدة؟

المحلول

ما هو بالضبط سؤالك؟ كيف تجمعهم؟ CompositeCollection.

تحرير: كما ذكر في التعليقات intuipic يقوم التطبيق بشيء مشابه لما تطلبه. هذه لقطة شاشة:

alt text

نصائح أخرى

هذا سهل للغاية ، مع الأخذ في الاعتبار كوكبة الخاص بك.

أولاً: اضبط الفصول الدراسية. لا تحتاج إلى قائمتين منفصلتين للملفات والمجلدات في فئة المجلدات. فقط استخدم واحدة IList<Base_FileFolder> داخل فئة base_filefolder (OOP جيد) ودعوها الأطفال!

ثم ستحتاج فقط خطوتين أخريين:

  1. اثنين من الهرميات

    <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. و treeview مثل هذا

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

هذا هو. قوة WPF هي بساطتها.

تحتاج إلى استخدام ستحتاج إلى 3 أشياء:

  1. A HierarchicalDatateMplate ، كما لديك ، للقيام بالأمهات+الأطفال ، وقالب المجلدات. قد تكون قادرًا على استخدام CompositEcollection هنا لدمج ملفات المجلدات+، لكنني لست متأكدًا من ذلك ... قد تضطر إلى إضافة خاصية أخرى إلى فئة المجلد التي تُرجع اتحاد الملفات والمجلدات وتسميتها " الأطفال "أو أيا كان ...
  2. datatemplate إلى الملفات في الشجرة
  3. Templateselector لإخبار الشجرة بالتبديل بين القوالب اعتمادًا على العنصر في الشجرة. بدلاً من إعداد عنصر itemTemplate على الشجرة ، قم بتعيين itemTemplateSelector على هذا.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top