Вопрос WPF TreeView

Можно ли хранить некоторые данные в каждом элементе элемента управления TreeView? То есть что-то полезное (например, строка) помимо текста заголовка? Спасибо.


person dpreznik    schedule 20.09.2011    source источник


Ответы (2)


Это зависит от того, что вы подразумеваете под данными магазина ...

Если вы просто говорите о настройке пользовательского интерфейса, ответ Рэйчел выше работает.

Если вы говорите о хранении произвольных значений объекта, таких как информация о TreeViewItem, или, возможно, о связи между двумя элементами, вы можете использовать свойство Tag для TreeViewItem. Например, мне пришлось написать интерфейс сопоставления, в котором два дерева связаны вместе, где каждый TreeViewItem из первого дерева может подключаться к 1 TreeViewItems второго дерева. Я использовал свойство Tag первого TreeViewItem для хранения подключающегося TreeViewItem.

person Josh    schedule 20.09.2011

Да, WPF «не выглядит», поэтому ваши фактические данные могут быть любыми, какими вы хотите, а TreeView - это просто Template, используемый для отображения данных пользователю заранее определенным образом.

Вы можете перезаписать любую часть этого Template, как хотите, и / или привязать ее к вашим данным, как хотите.

Изменить

Я не специалист по использованию TreeView, но если бы у вас был DataContext List<Folder>, и каждый объект Folder имел свойства Name и FullPath, ваш TreeView мог бы выглядеть примерно так:

<TreeView ItemsSource="{Binding MyFolderList}">
    <TreeView.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Name}"
                       ToolTip="{Binding FullPath}" />
        </DataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

Если вы еще этого не сделали, я настоятельно рекомендую изучить шаблон проектирования MVVM при работе с WPF. По сути, ваше приложение - это ваши классы (ViewModels), а Controls / XAML (Views) - это просто красивый слой, который находится поверх ваших классов, чтобы сделать их удобными для пользователя.

Это важная концепция при переключении с WinForms TreeView на WPF TreeView.

person Rachel    schedule 20.09.2011
comment
Спасибо, но не могли бы вы дать мне простой пример, как назначить строку для TreeViewItem? Я понимаю, как назначить текст заголовка, но это все. Я новичок в WPF. - person dpreznik; 20.09.2011
comment
Я добавил пример, хотя мне кажется, что ответ Джоша лучше, если вы не используете MVVM. - person Rachel; 20.09.2011
comment
Спасибо, Рэйчел. Приходится многому учиться, даже не знаю с чего начать :) - person dpreznik; 20.09.2011