Привязка к TreeView в WPF - PullRequest
       8

Привязка к TreeView в WPF

1 голос
/ 24 марта 2010

Я пытаюсь привязать некоторые данные из экземпляра класса к TreeView. Мой код выглядит следующим образом:

public partial class MainWindow : Window
{        
    public MainWindow()
    {
        InitializeComponent();

        Parent myClass = new Parent();
        this.DataContext = myClass;
    }
}

public class Parent
{
    private List<string> children = new List<string>;

    public string Name {get;set;}
    public List<string> Children 
    {
        get { return this.children; } 
        set { this.children=value; }
    }

    public Parent()
    {
        this.Name = "Test";

        for (int i = 1; i <= 10; i++)
        {
            Children.Add(i.ToString());
        }
    }
}

И XAML:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:loc="clr-namespace:WpfApplication1"
    Title="MainWindow" Height="287" Width="525">

    <StackPanel Orientation="Horizontal" VerticalAlignment="Stretch">
        <TreeView Name="TreeView" ItemsSource="{Binding}">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Children}">
                        <TextBlock Text="{Binding Name}"/>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>
    </StackPanel>    
</Window>

Ничего не отображается в моем TreeView. Что я делаю не так?

Я ожидаю увидеть:

-Тест
- 1
- 2
- 3
и т. д.

обновлено: сделать свойства Name и Children вместо открытых полей.
обновлено: добавлено то, что я ожидаю увидеть в TreeView

Ответы [ 3 ]

2 голосов
/ 24 марта 2010

Вы привязываете «myClass» типа Parent к текстовому тексту и используете тот же объект для ItemSource. Это не будет работать, потому что Parent не является перечислимым типом.

Измените привязку ItemSource с "{Binding}" на "{Binding Children}" и измените свой HierarchicalDataTemplate на просто DataTemplate.

Если вы хотите сохранить myClass в качестве узла верхнего уровня, вы можете также обернуть myclass в IEnumerable и установить его в качестве контекста данных.

0 голосов
/ 24 марта 2010

Здесь попробуйте следующее:

   <StackPanel Orientation="Horizontal" VerticalAlignment="Stretch">
        <TextBlock Text="{Binding Name}"/>
        <TreeView Name="TreeView" ItemsSource="{Binding Children}">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Children}">
                    <TextBlock Text="{Binding}"/>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>
    </StackPanel>

Несколько вещей:

  • Свойство 'Name' вышло за рамки.
  • Нам нужносвязать TreeView, а также DataTemplate
  • Мы используем {Binding} по умолчанию для вызова ToString () для текущего элемента.
0 голосов
/ 24 марта 2010

Вы можете привязывать только к общедоступным свойствам, а не к полям. Измените Name и Children на общедоступные свойства, и это должно работать.

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