[英]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.