绑定在treeview WPF中无法正常工作

anu*_*Jha 3 c# wpf treeview

我有一个Employee类,如下所示:

public class Employee : INotifyPropertyChanged
    {
        public Employee()
        {
            _subEmployee = new ObservableCollection<Employee>();
        }

        public string Name { get; set; }

        public ObservableCollection<Employee> SubEmployee
        {
            get { return _subEmployee; }
            set
            {
                _subEmployee = value;
                NotifiyPropertyChanged("SubEmployee");
            }
        }

        ObservableCollection<Employee> _subEmployee;

        public event PropertyChangedEventHandler PropertyChanged;
        void NotifiyPropertyChanged(string property)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(property));
        }
    }
Run Code Online (Sandbox Code Playgroud)

我正在Main窗口构造函数中创建一个employee类的集合,并将其添加到一个可观察的员工集合中,如下所示:

public partial class MainWindow : Window
    {
        public ObservableCollection<Employee> Emp { get; private set; }
        public MainWindow()
        {
            InitializeComponent();
            Emp = new ObservableCollection<Employee>();
            Emp.Add(new Employee(){Name = "Anuj"});
            Emp.Add(new Employee() { Name = "Deepak" });
            Emp.Add(new Employee() { Name = "Aarti" });

            Emp[0].SubEmployee.Add(new Employee(){Name = "Tonu"});
            Emp[0].SubEmployee.Add(new Employee() { Name = "Monu" });
            Emp[0].SubEmployee.Add(new Employee() { Name = "Sonu" });

            Emp[2].SubEmployee.Add(new Employee() { Name = "Harsh" });
            Emp[2].SubEmployee.Add(new Employee() { Name = "Rahul" });
            Emp[2].SubEmployee.Add(new Employee() { Name = "Sachin" });
            this.DataContext = this;
        }      
    }
Run Code Online (Sandbox Code Playgroud)

我已将DataContext设置为self.现在,在xaml文件中,我创建了树视图和绑定数据的分层模板,如下所示:

<Window x:Class="WpfApplication3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TreeView ItemsSource="{Binding}">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding SubEmployee}">
                    <TextBlock Text="{Binding Name}" />
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>

    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

现在,当我保持,TreeView ItemsSource="{Binding Emp}"绑定正常工作,我可以在运行代码后看到树视图结构.但是当我保留时TreeView ItemsSource="{Binding}",运行代码后我看不到任何结果.

据我所知,保持ItemSource = "{Binding}"意味着我绑定到当前datacontext的评估值.由于我的datacontext设置为self,ItemSource = "{Binding}"应该意味着我绑定到DataContext的唯一属性,即Emp和我应该得​​到正确的结果.

请帮助我理解我在保持绑定方面遇到的问题 ItemSource = "{Binding}".

bli*_*ins 5

"根据我的理解,保持ItemSource = "{Binding}"意味着我绑定到当前datacontext的评估值."

正确而且这就是问题所在.ItemsSource期望绑定源是类型IEnumerable但绑定到Window.

"...应该意味着我绑定到DataContext的唯一属性,即Emp和我应该得​​到适当的结果."

不可以.在WPF绑定约定中不存在这样的"单一属性"假设.

更改...

this.DataContext = this;
Run Code Online (Sandbox Code Playgroud)

至...

this.DataContext = Emp;
Run Code Online (Sandbox Code Playgroud)

或者,替代地,更改XAML中的绑定并在DataContext上指定要绑定到使用的正确成员Path...

<TreeView ItemsSource="{Binding Path=Emp}">
Run Code Online (Sandbox Code Playgroud)