2010-04-15 99 views
0

我有定义为一个树视图问题如下:WPF:用树视图的数据绑定

<HierarchicalDataTemplate x:Key="ChildTemplate" 
          ItemsSource="{Binding Children}"> 
    <TextBlock Text="{Binding TagName, Mode=OneWay}"/> 
</HierarchicalDataTemplate> 
<HierarchicalDataTemplate x:Key="NavigationHeaderTemplate" 
          ItemsSource="{Binding Children}" 
          ItemTemplate="{StaticResource ChildTemplate}"> 
    <StackPanel Orientation="Horizontal" Margin="0"> 
     <Image Source="{Binding Image}" Height="16" Width="16"></Image> 
     <TextBlock Text="{Binding Header}"></TextBlock> 
    </StackPanel> 
</HierarchicalDataTemplate> 
<TreeView Grid.Row="0" Grid.Column="0" Margin="0" 
    FlowDirection="LeftToRight" 
    ItemTemplate="{StaticResource NavigationHeaderTemplate}" 
    Name="TreeView2"> 
</TreeView> 

数据绑定是:

public class ViewTag : INotifyPropertyChanged 
{ 
    private string _tagName; 
    public string TagName 
    { 
     get { return _tagName; } 
     set 
     { 
      _tagName = value; 
      PropertyChanged(this, new PropertyChangedEventArgs("Tag Name")); 
     } 
    } 
    private ObservableCollection<ViewTag> _childTags; 
    public ObservableCollection<ViewTag> ChildTags 
    { 
     get { return _childTags; } 
     set 
     { 
      _childTags = value; 
      OnPropertyChanged(new PropertyChangedEventArgs("Child Tags")); 
     } 
    } 

    #region INotifyPropertyChanged Members 

    public event PropertyChangedEventHandler PropertyChanged; 
    public void OnPropertyChanged(PropertyChangedEventArgs e) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, e); 
    } 
    #endregion 

    public ViewTag(string tagName, ObservableCollection<ViewTag> childTags) 
    { 
     _tagName = tagName; 
     _childTags = childTags; 
    } 
} 

public class ViewNavigationTree 
{ 
    public string Image { get; set; } 
    public string Header { get; set; } 
    public ObservableCollection<ViewTag> Children { get; set; } 
} 

而我的测试结合是:

 var xy = new List<ViewNavigationTree>(); 
     List<ViewTag> tempTags = new List<ViewTag>(); 
     ViewTag t1, t2, t3, t4, t5, t6; 
     t1 = new ViewTag("Computers", null); 
     t2 = new ViewTag("Chemistry", null); 
     t3 = new ViewTag("Physics", null); 
     var t123 = new ObservableCollection<ViewTag>(); 
     t123.Add(t1); 
     t123.Add(t2); 
     t123.Add(t3); 
     t4 = new ViewTag("Science", t123); 
     var t1234 = new ObservableCollection<ViewTag>(); 
     t1234.Add(t4); 
     t5 = new ViewTag("All Items", t1234); 
     t6 = new ViewTag("Untagged", null); 

     var tall = new ObservableCollection<ViewTag>(); 
     tall.Add(t5); 
     tall.Add(t6); 
     xy.Add(new ViewNavigationTree() { Header = "Tags", Image = "img/tags2.ico", Children = tall }); 

     var rootFolders = eDataAccessLayer.RepositoryFacrory.Instance.MonitoredDirectoriesRepository.Directories.ToList(); 
     var viewFolders = new ObservableCollection<ViewTag>(); 
     foreach (var vf in rootFolders) 
     { 
      viewFolders.Add(new ViewTag(vf.FullPath, null)); 
     } 
     xy.Add(new ViewNavigationTree() { Header = "Folders", Image = "img/folder_16x16.png", Children = viewFolders }); 

     xy.Add(new ViewNavigationTree() { Header = "Authors", Image = "img/user_16x16.png", Children = null }); 
     xy.Add(new ViewNavigationTree() { Header = "Publishers", Image = "img/powerplant_32.png", Children = null }); 

     TreeView2.ItemsSource = xy; 

问题是,树只显示:

+ Tags 
    All Items 
    Untagged 
+ Folders 
    dir 1 
    dir 2 
    ... 
Authors 
Publishers 

我在“所有项目”下添加的项目不显示。

作为一个WPF结点,我不能把我的手指放在这个问题上。任何帮助将大大appriciated。

+0

什么是xy和ViewNavigationTree? – 2010-04-15 19:46:59

+0

增加了缺少的代码 – Amirshk 2010-04-15 19:49:55

回答

1

这里跳出来的唯一事情就是你引用ChildTemplate中的Children属性而不是ViewTag中定义的ChildTags。

+0

非常感谢,对我感到羞耻... – Amirshk 2010-04-15 20:25:01

0

对于TreeView绑定,您需要使用HierarchicalDataTemplate。这使您可以指定节点的数据,也指定节点的子节点(绑定到ItemsSource)。

+0

@Andy,忘记发布该代码。我正在使用HierarchicalDataTemplate。 – Amirshk 2010-04-15 19:47:02