[英]WPF ListView Binding ItemsSource in XAML
我有一個簡單的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中的綁定不起作用?
如果您還沒有這樣做,例如在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 = "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" });
}
將此行放在xaml.cs中的現有代碼之后
this.DataContext = People;
並用。替換你的xaml
ItemsSource="{Binding People}"
至
ItemsSource="{Binding}"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.