我有一个简单的XAML页面,上面定义了ListView
<ListView Margin="10" Name="lvUsers" ItemsSource="{Binding People}">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding Name}" />
<GridViewColumn Header="Age" Width="50" DisplayMemberBinding="{Binding Age}" />
<GridViewColumn Header="Mail" Width="150" DisplayMemberBinding="{Binding Mail}" />
</GridView>
</ListView.View>
</ListView>
在我后面的代码中:
public ObservableCollection<Person> People { get; set; }
public ListView()
{
InitializeComponent();
this.People = new ObservableCollection<Person>();
this.People.Add(new Person() { Name = "John Doe", Age = 42, Mail = "[email protected]" });
this.People.Add(new Person() { Name = "Jane Doe", Age = 39, Mail = "[email protected]" });
this.People.Add(new Person() { Name = "Sammy Doe", Age = 7, Mail = "[email protected]" });
}
如果我像这样在后面的代码中设置列表视图的ItemsSource
lvUsers.ItemsSource = this.People;
它可以正常工作,并且我的网格按预期显示
但是,如果我删除该行并尝试在XAML中进行绑定
<ListView Margin="10" Name="lvUsers" ItemsSource="{Binding People}">
它不再起作用。
为什么XAML中的绑定不起作用?
如果尚未执行此操作,例如在XAML中,则需要设置DataContext
绑定。另外,由于People
属性未实现,因此INotifyPropertyChanged
您可能要在之前InitializeComponent
(至少在设置之前)创建此列表DataContext
,以确保在评估绑定时列表已准备就绪。您可以在ObservableCollection
以后添加内容,但是如果在此之后创建它而不通知UI,它将无法正常工作
public ListView()
{
this.People = new ObservableCollection<Person>();
InitializeComponent();
this.DataContext = this;
this.People.Add(new Person() { Name = "John Doe", Age = 42, Mail = "[email protected]" });
this.People.Add(new Person() { Name = "Jane Doe", Age = 39, Mail = "[email protected]" });
this.People.Add(new Person() { Name = "Sammy Doe", Age = 7, Mail = "[email protected]" });
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句