我有一个简单的类,定义如下:
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% 确定你现在需要这个,所以我把它省略了。
Edit:这是“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" }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)