我有一个简单的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 = "john@doe-family.com" });
this.People.Add(new Person() { Name = "Jane Doe", Age = 39, Mail = "jane@doe-family.com" });
this.People.Add(new Person() { Name = "Sammy Doe", Age = 7, Mail = "sammy.doe@gmail.com" });
}
如果我在代码后台像这样设置我的listview的ItemsSource
lvUsers.ItemsSource = this.People;
它起作用了,我的网格显示如预期。
但是如果我删除那行并尝试在XAML中绑定:
<ListView Margin="10" Name="lvUsers" ItemsSource="{Binding People}">
它不再工作。
为什么XAML中的绑定不起作用?
DataContext
,而是想在 XAML 中进行初始化。如果你在InitializeComponent
之后这样做,并且没有使用INotifyPropertyChanged
,它将无法正常工作。 - dkozlListView.ItemsSource
的绑定,而是将其设置为本地值,该值可以是任何IEnumerable
。绑定在绑定上下文中工作。它需要从对象中获取该属性。项目仍将使用绑定,因为ListView
将把每个ListViewItem
的DataContext
设置为集合中的项。 - dkozl