2009-12-06 89 views
3

我想使用mvvm填充树视图,但树不显示任何数据。 我有一个员工列表,这是我的虚拟机中的一个属性,其中包含他的员工数据。 xaml如下: 。wpf treeview mvvm

   <Style TargetType="{x:Type TreeViewItem}"> 
        <Setter Property="FontWeight" Value="Normal" /> 

       </Style> 
      </TreeView.ItemContainerStyle> 

      <TreeView.ItemTemplate> 

       <HierarchicalDataTemplate ItemsSource="{Binding EmpList}" > 
        <TextBlock Text="{Binding EmpName}"/> 

       </HierarchicalDataTemplate> 

      </TreeView.ItemTemplate> 

     </TreeView> 

有什么我很想念这里。

感谢

回答

7

嗨伊恩建议的文章确实是一个伟大的阅读!

诀窍是你应该指定Treeview如何通过类型特定(分层)DataTemplates显示它的项目。您可以在树视图的资源中指定这些数据模板(如果您想在更多的树视图中重用它们,则在视觉树中更高)。

我试图模仿你想要什么:

<Window x:Class="TreeViewSelection.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:TreeViewSelection" 
    Title="Window1" Height="300" Width="300"> 
    <StackPanel> 
     <TreeView ItemsSource="{Binding Enterprises}"> 
      <TreeView.Resources> 
       <!-- template for showing the Enterprise's properties 
        the ItemsSource specifies what the next nested level's 
        datasource is --> 
       <HierarchicalDataTemplate DataType="{x:Type local:Enterprise}" 
              ItemsSource="{Binding EmpList}"> 
        <Label Content="{Binding EntName}"/> 
       </HierarchicalDataTemplate> 
       <!-- the template for showing the Employee's properties--> 
       <DataTemplate DataType="{x:Type local:Employee}"> 
        <Label Content="{Binding EmpName}"/> 
       </DataTemplate> 
      </TreeView.Resources> 
     </TreeView> 
    </StackPanel> 
</Window> 


    using System.Collections.ObjectModel; 
using System.Windows; 

namespace TreeViewSelection 
{ 
    public partial class Window1 : Window 
    { 
     public ObservableCollection<Enterprise> Enterprises { get; set; } 
     public Window1() 
     { 
      InitializeComponent(); 
      Enterprises = new ObservableCollection<Enterprise> 
          { 
           new Enterprise("Sweets4Free"), 
           new Enterprise("Tires4Ever") 
          }; 
      DataContext = this; 
     } 
    } 

    public class Enterprise : DependencyObject 
    { 
     public string EntName { get; set; } 
     public ObservableCollection<Employee> EmpList { get; set; } 

     public Enterprise(string name) 
     { 
      EntName = name; 
      EmpList = new ObservableCollection<Employee> 
         { 
          new Employee("John Doe"), 
          new Employee("Sylvia Smith") 
         }; 
     } 
    } 
     public class Employee : DependencyObject 
     { 
      public string EmpName { get; set; } 
      public Employee(string name) 
      { 
       EmpName = name; 
      } 
     } 
    } 
+0

将其放入OP的上下文中:) – kiwipom 2009-12-06 10:19:48

5

退房约什 - 史密斯的正是这个主题的article ...帮助了我没有结束!

p.s.看起来像缺少HierarchicalDataTemplate上的DataType属性,例如

<HierarchicalDataTemplate 
    DataType="{x:Type local:ItemType}" 
    ItemsSource="{Binding ...}" > 
+0

大文章。谢谢! – Dabblernl 2009-12-06 10:18:12