Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么TreeView控件没有';t绑定_C#_Wpf_Mvvm_Data Binding_Treeview - Fatal编程技术网

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}”