C# 为什么TreeView控件没有';t绑定
这是我的模型:C# 为什么TreeView控件没有';t绑定,c#,wpf,mvvm,data-binding,treeview,C#,Wpf,Mvvm,Data Binding,Treeview,这是我的模型: public class TreeItem : INotifyPropertyChanged { private ObservableCollection<TreeItem> _items; private string _fullPath; private string _name; public string Name { get { return _name;
public class TreeItem : INotifyPropertyChanged
{
private ObservableCollection<TreeItem> _items;
private string _fullPath;
private string _name;
public string Name
{
get
{
return _name;
}
set
{
_name = value;
OnPropertyChanged("Name");
}
}
public string FullPath
{
get
{
return _fullPath;
}
set
{
_fullPath = value;
OnPropertyChanged("FullPath");
}
}
public ObservableCollection<TreeItem> Items
{
get
{
return _items;
}
set
{
_items = value;
OnPropertyChanged("Items");
}
}
public TreeItem(string name)
{
Name = name;
Items = new ObservableCollection<TreeItem>();
}
public TreeItem()
{
Items = new ObservableCollection<TreeItem>();
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName]string prop = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
因此,MainWindowViewModel有一个公共属性:
private TreeItem _folderFiles;
public TreeItem FolderFiles {
get
{
return _folderFiles;
}
set
{
_folderFiles = value;
OnPropertyChanged("FolderFiles");
}
}
在某些方法中,我看到_folderfile包含数据,但它不会显示在treeView上。如果我将在treeView中硬编码一些元素,它们将显示出来
我有什么不正确的地方吗?您的问题是:
public TreeItem FolderFiles
{
get
{
return _folderFiles;
}
set
{
_folderFiles = value;
OnPropertyChanged("FolderFiles");
}
}
此属性的类型为TreeItem
,但您试图在TreeView.ItemsSource
属性的绑定中使用它。该属性需要一个IEnumerable
对象。如果查看“调试输出”窗口,将发现其中存在数据错误,因为绑定无法提供正确的值
将属性更改为IEnumerable
创建一个observateCollection
作为根容器:
public ObservableCollection<TreeItem> FolderFiles { get; } = new ObservableCollection<TreeItem>();
//...
FolderFiles.Add(_folderFiles);
public observeCollection FolderFiles{get;}=new observeCollection();
//...
添加(_FolderFiles);
如果只希望有一个根元素,可以执行以下操作:
private TreeItem _folderFiles;
public IEnumerable<TreeItem> FolderFiles => new[] { _folderFiles };
private TreeItem\u folderfile;
public IEnumerable FolderFiles=>new[]{{u FolderFiles};
(请注意,此示例不支持INotifyPropertyChanged
和INotifyCollectionChanged
,但您肯定可以实现它。)您的问题在于:
public TreeItem FolderFiles
{
get
{
return _folderFiles;
}
set
{
_folderFiles = value;
OnPropertyChanged("FolderFiles");
}
}
此属性的类型为TreeItem
,但您试图在TreeView.ItemsSource
属性的绑定中使用它。该属性需要一个IEnumerable
对象。如果查看“调试输出”窗口,将发现其中存在数据错误,因为绑定无法提供正确的值
将属性更改为IEnumerable
创建一个observateCollection
作为根容器:
public ObservableCollection<TreeItem> FolderFiles { get; } = new ObservableCollection<TreeItem>();
//...
FolderFiles.Add(_folderFiles);
public observeCollection FolderFiles{get;}=new observeCollection();
//...
添加(_FolderFiles);
如果只希望有一个根元素,可以执行以下操作:
private TreeItem _folderFiles;
public IEnumerable<TreeItem> FolderFiles => new[] { _folderFiles };
private TreeItem\u folderfile;
public IEnumerable FolderFiles=>new[]{{u FolderFiles};
(请注意,此示例不支持
INotifyPropertyChanged
和INotifyCollectionChanged
,但您肯定可以实现它。)FolderFiles
应该是一个IEnumerable
,因为您将其用作项目资源
(请参阅绑定:ItemsSource=“{binding FolderFiles}”
)FolderFiles
应该是一个IEnumerable
,因为您将它用作ItemsSource
(请参阅绑定:ItemsSource=“{binding FolderFiles}”
)