Рекурсивная привязка в WPF TreeView - PullRequest
3 голосов
/ 18 августа 2010

Я пытаюсь рекурсивно связать дочерние элементы элемента в TreeView.Из того, что я вижу в MSDN, HierarchicalDataTemplate - это путь, но пока я добился лишь частичного успеха.

Мой класс:

 public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DocumentText test = new DocumentText();
        this.DataContext = test;

        for (int i = 1; i < 5; i++)
        {
            test.AddChild();
        }
        foreach (DocumentText t in test.Children)
        {
            t.AddChild();
            t.AddChild();
        }
    }
}

partial class DocumentText
{
    private string _name;
    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }

    public override string ToString()
    {
        return Name;
    }

    public List<DocumentText> _children;
    public List<DocumentText> Children
    {
        get { return this._children; }
    }

    public DocumentText()
    {
        _name = "Test";
        _children = new List<DocumentText>();
    }

    public void AddChild()
    {
        _children.Add(new DocumentText());
    }
}

Мой XAML: В mainview.xaml:

    <Window x:Class="treetest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TreeView Name="binderPanel" DockPanel.Dock="Left" 
                      MinWidth="150" MaxWidth="250" Background="LightGray"
                      ItemsSource="{Binding Children}">
        </TreeView>
    </Grid>
</Window>

В app.xaml:

    <HierarchicalDataTemplate x:Key="BinderTemplate"
 DataType="{x:Type src:DocumentText}" ItemsSource="{Binding Path=/Children}">
            <TreeViewItem Header="{Binding}"/>
        </HierarchicalDataTemplate>

Этот код создает список первых дочерних элементов, но вложенные дочерние элементы не отображаются.

1 Ответ

4 голосов
/ 18 августа 2010

Основная проблема в том, что вы опубликовали, заключается в том, что вы не подключили HierarchicalDataTemplate как ItemTemplate TreeView.Вам нужно либо установить ItemTemplate="{StaticResource BinderTemplate}", либо удалить x: Key, чтобы применить шаблон ко всем экземплярам DocumentText.Вам также следует изменить TreeViewItem в шаблоне на TextBlock - TreeViewItem генерируется для вас, и то, что вы помещаете в этот шаблон, применяется к нему как HeaderTemplate.

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