Привязка к дереву WPF, КАК отображать другой класс данных как дочерний узел? - PullRequest
1 голос
/ 24 сентября 2010

Я пытаюсь отобразить группу (расширение файла и значок) (родительский), а затем все файлы, найденные в этой группе (дочерний), в WPF Treeview. Я могу заставить группы отображаться в древовидной структуре, каждая из которых имеет значок и текст, однако я не понимаю, как отображать файлы как дочерние группы. Вот класс GroupInfo, проблема в том, что он содержит FileInfo, другой класс, и во всех руководствах, которые я читал на WPF Treeview, для создания элементов дерева используется только один класс данных:

public class GroupInfo
{
    public GroupInfo()
    {
        alFiles = new ObservableCollection<FileInfo>();
    }

    public string strExtension { get; set; }
    public ImageSource icon {get; set;}
    public string strDescription { get; set; }

    public string TypeDescription 
    {
        get
        {
            string s = strExtension;
            s.Replace('.',' ');
            s += " - " + strDescription;
            return s;
        }

        set
        {

        }
    }

    public ObservableCollection<FileInfo> alFiles;

    void LoadIcon()
    {
        //icon = BitmapFrame.Create();
    }

    string GetDescription()
    {
        string strD = "";

        return strD;
    }
}

Я хочу показать все классы FileInfo в alFiles как дочерние узлы группы. Вот мой XAML:

<TreeView Margin="12,12,12,375" Name="trGroups" ItemsSource="{Binding Groups}" >
        <TreeView.Resources>
            <HierarchicalDataTemplate DataType="{x:Type local:GroupInfo}" 
                              ItemsSource="{Binding Groups}">
                <StackPanel Orientation="Horizontal" Margin="2">
                <Image Source="{Binding icon}"
                    Width="16" 
                   Height="16" 
                   SnapsToDevicePixels="True"/>
                    <TextBlock Text="{Binding TypeDescription}" Margin="5,0"/>

                </StackPanel>
            </HierarchicalDataTemplate>
            <HierarchicalDataTemplate DataType="{x:Type local:FileInfo}" 
                              ItemsSource="{Binding Groups.Files}">
                <StackPanel Orientation="Horizontal" Margin="2">
                    <Image Source="{Binding icon}"
                    Width="16" 
                   Height="16" 
                   SnapsToDevicePixels="True"/>
                    <TextBlock Text="{Binding TypeDescription}" Margin="5,0"/>

                </StackPanel>
            </HierarchicalDataTemplate>
        </TreeView.Resources>
    </TreeView>

Заранее спасибо ....

1 Ответ

0 голосов
/ 24 сентября 2010

Несколько вещей.Во-первых, в вашем классе GroupInfo вы должны определить свойство для вашего поля alFiles.Это сделано для того, чтобы он мог работать с привязками.

public ObservableCollection<FileInfo> alFiles;
public ObservableCollection<FileInfo> AlFiles { get { return alFiles;} }

Далее, в вашем HierarchicalDataTemplate для GroupInfo для ItemsSource должно быть установлено свойство AlFiles.

<HierarchicalDataTemplate DataType="{x:Type local:GroupInfo}" 
                              ItemsSource="{Binding AlFiles}">

Наконец, если толькоВ классе FileInfo есть дочерние элементы, которые вы хотите отобразить в TreeView, вы можете изменить его шаблон на <DataTemplate> вместо <HierarchicalDataTemplate>.

<DataTemplate DataType="{x:Type local:FileInfo}">
...                
</DataTemplate>

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...