TreeView不显示存储在数据中的子节点

在我的程序中,我有一个带有数据支持的TreeView (查看模型和数据模型)。 添加到TreeView每个项目都会添加一个子项目,但由于某种原因,子项在运行时没有反映。 但是,我能够在调试期间看到子项, TreeView's数据模型中的“Children”属性在其setter中包含NotifyPropertyChange

注意:之前我遇到了类似的问题,即新添加的节点(这些子节点的父节点)也不会显示。 通过在树的xaml中设置DisplayMemberPath="DisplayName.Value"来解决此问题。

TreeView's xaml:

 TreeView ItemsSource="{Binding UserControl_DataModel.TreeViewViewModel.ObservableCollection}" DisplayMemberPath="DisplayName.Value".../> 

这是创建新节点并将其添加到TreeView (TreeViewViewModel)的位置:

 private TreeViewDataModel createNewNode(StringItem nodeName) { var newNode = new TreeViewDataModel () { DisplayName = nodeName }; newNode.Children.Add(new TreeViewDataModel () { DisplayName = nodeName}); return newNode; } public void addNewLocNode(StringItem nodeName) { TreeObservableCollection.Add(createNewNode(nodeName)); } 

注意: StringItem是一个自定义类。 StringItemValue返回项的字符串值。 (例如: StringItem.Value

TreeViewDataModel中的Children属性:

 public ObservableCollection Children { get { return _children ?? (_children = new ObservableCollection()); } set { _children = value; NotifyPropertyChange(() => Children); } } 

为什么子节点不会出现在我的TreeView ,我该如何解决这个问题呢?

您没有足够的代码让我确切地知道您是如何设置的。 我试图让它与你已有的相似。 我想你应该能够弄清楚。

截图:

在此处输入图像描述

XAML:

              

码:

 using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace WpfApplication9 { ///  /// Interaction logic for MainWindow.xaml ///  public partial class MainWindow : Window { public ObservableCollection TreeObservableCollection { get; set; } public MainWindow() { InitializeComponent(); TreeObservableCollection = new ObservableCollection(); this.DataContext = this; this.Loaded += MainWindow_Loaded; } void MainWindow_Loaded(object sender, RoutedEventArgs e) { addNewLocNode(new StringItem("A")); addNewLocNode(new StringItem("B")); addNewLocNode(new StringItem("C")); addNewLocNode(new StringItem("D")); } private TreeViewDataModel createNewNode(StringItem nodeName) { var newNode = new TreeViewDataModel() { DisplayName = nodeName }; newNode.Children.Add(new TreeViewDataModel() { DisplayName = nodeName }); return newNode; } public void addNewLocNode(StringItem nodeName) { TreeObservableCollection.Add(createNewNode(nodeName)); } } public class StringItem { public string Value { get; set; } public StringItem(string val) { Value = val; } } public class TreeViewDataModel : System.ComponentModel.INotifyPropertyChanged { public StringItem DisplayName { get; set; } private ObservableCollection _children; public ObservableCollection Children { get { return _children ?? (_children = new ObservableCollection()); } set { _children = value; NotifyPropertyChange("Children"); } } private void NotifyPropertyChange(string name) { if (PropertyChanged != null) PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(name)); } #region INotifyPropertyChanged Members public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; #endregion } } 

ALT-方式: