WPF数据绑定与集合对象

唉,虽然我一直在谷歌搜索,我真的很感激,如果有人可以打破我的问题,因为在线的所有代码示例让我困惑,而不是协助(也许它只是迟到)…

我有一个简单的类定义如下:

public class Person
{
    int _id;
    string _name;

    public Person()
    { }

    public int ID
    {
        get { return _id; }
        set { _id = value; }
    }

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }
}

存储在数据库中,并通过一些代码我将它放入一个ObservableCollection对象,以便稍后尝试在WPF中进行数据绑定:

public class People : ObservableCollection<Person>
{
    public People() : base() { }

    public void Add(List<Person> pListOfPeople)
    {
        foreach (Person p in pListOfPeople) this.Add(p);
    }
}

在XAML中,我自己有一个ListView,我希望为“People”对象中的每个项目填充ListViewItem(由文本块组成),因为它从数据库中更新.我还希望该文本块绑定到Person对象的“Name”属性.

我一开始以为我能做到这一点:

lstPeople.DataContext = objPeople;

其中lstPeople是我的XAML中的ListView控件,但那当然什么都不做.我在网上找到了大量的例子,人们通过XAML创建了一个对象,然后通过他们的XAML绑定到它;但不是我们绑定到实例化对象并相应地重新绘制的对象.

有人可以给我一些指示:

A)如何将ListView控件绑定到我实例化的“People”集合对象?

B)如何将模板应用于我的ListView,以便为集合中的对象格式化它?

甚至链接到一个体面的例子(不是一个操作在XAML中声明的对象)将不胜感激.

谢谢你的时间.

你太近了.

lstPeople.ItemsSource = objPeople; // :)

您需要的唯一其他方法是如何为集合中的每个项目应用视图.没问题.我不会使用ListView …我只会使用ItemsControl,因为它有点简单.

<ItemsControl x:Name="lstPeople">
    <ItemsControl.ItemTemplate>
         <DataTemplate>
              <TextBlock Text="{Binding Name}" />
         </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

这就是它. Listview的策略是相同的,但是你需要提供更多的XAML来提供列标题和内容.我不是100%肯定你现在需要这个,所以我把它留了出来.

编辑:这是“AddRange”的扩展方法,它将通过继承ObservableCollection来完成您要做的事情.更容易……特别是如果你最终收集了很多类型(你会)

public static void AddRange<T>(this ObservableCollection<T> collection, IEnumerable<T> items)
{
     foreach(var item in items)
     {
          collection.Add(item);
     }
}

然后你可以这样做:

ObservableCollection<Person> peeps = new ObservableCollection<Person>();
peeps.AddRange(new List<Person>
{ 
     new Person() { Name = "Greg" }, 
     new Person() { Name = "Joe" } 
});
相关文章
相关标签/搜索