繁体   English   中英

XAML中的WPF ListView绑定ItemsSource

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM