2010-03-23 5 views
3

Рассмотрим следующую структуру данных:TreeView привязки проблемы в WPF

List<Person> People; 
class Person { 
    List<Car> Cars; 
    List<Hobby> Hobbies; 
} 

Я хочу связать TreeView с этой структурой. И это должно выглядеть так:

People 
> Frank 
    > Cars 
    > BMW 
    > Ford 
    > Hobbies 
    > Tennis 
    > Golf 
> Jane 
    > Cars 
    > Hobbies 

Как это можно достичь в XAML? Вот что у меня до сих пор:

<TreeView> 
    <TreeView.Resources> 
    <DataTemplate x:Key="PersonTemplate"> 
     <TextBlock Header="{Binding Name}"> 
     <TextBlock.ContextMenu> 
      <ContextMenu> 
      <MenuItem Header="Remove" /> 
      </ContextMenu> 
     </TextBlock.ContextMenu> 
     </TextBlock> 
    </DataTemplate> 
    </TreeView.Resources> 

    <TreeViewItem Header="{Binding Name}"IsExpanded="True" > 
    <TreeViewItem Header="People" 
      ItemsSource="{Binding People}" 
      ItemTemplate="{StaticResource PersonTemplate}"> 
    </TreeViewItem> 
    </TreeViewItem> 
</TreeView> 

Это прослеживание вопрос binding-a-treeview-with-contextmenu-in-xaml

ответ

5

Это отличный способ начать использовать MVVM для TreeView связывания:

http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx

+0

Вы избили меня к этому :-) Это такая чистая абстракция презентации и данных (модель) -слой. Я фактически использовал пример Джоша в производственном коде, и он работает красиво. – bic

+0

Я согласен, работая через этот конкретный образец, действительно заставил меня все щелкнуть. – gn22

+0

Хорошо, это выглядит интересно. Завтра я буду читать дальше. Вы рекомендуете использовать ViewModel как: class PersonViewModel {object [] Items = {new CarsViewModel(), новый HobbiesViewModel()}? Таким образом, создавая ViewModel для каждого TreeViewItem, который я хочу отобразить? –

Смежные вопросы