簡體   English   中英

綁定在treeview WPF中無法正常工作

[英]Binding not working properly in treeview WPF

我有一個Employee Class,如下所示:

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));
        }
    }

我正在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;
        }      
    }

我已將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>

現在,當我保留TreeView ItemsSource="{Binding Emp}" ,綁定正常工作,我可以在運行代碼后看到樹視圖結構。 但是,當我保留TreeView ItemsSource="{Binding}" ,運行代碼后看不到任何結果。

據我所知,保持ItemSource = "{Binding}"意味着我綁定到當前datacontext的評估值。 當我的datacontext設置為self時, ItemSource = "{Binding}"應該意味着我綁定到DataContext的唯一屬性,即Emp和我應該得​​到正確的結果。

請幫助我理解我在保持綁定方面遇到的問題,如ItemSource = "{Binding}"

“根據我的理解,保持ItemSource = "{Binding}"意味着我綁定到當前datacontext的評估值。”

正確而且這就是問題所在。 ItemsSource期望綁定源的類型為IEnumerable但是您綁定到Window

“...應該意味着我綁定到DataContext的唯一屬性,即Emp和我應該得​​到正確的結果。”

不可以。在WPF綁定約定中不存在這樣的“單一屬性”假設。

更改...

this.DataContext = this;

至...

this.DataContext = Emp;

或者,或者,在XAML中更改綁定並在DataContext上指定要綁定到使用Path的正確成員...

<TreeView ItemsSource="{Binding Path=Emp}">

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM