我有一个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}".
"根据我的理解,保持
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)
| 归档时间: |
|
| 查看次数: |
654 次 |
| 最近记录: |