【发布时间】:2014-07-14 15:08:12
【问题描述】:
我有一个问题,我有一个由“人”填充的 GridView
ObservableCollection<Person> People
{
get { return directory.People }
set { directory.People = value; }
}
这是对 GridView 的完美更新,但我只想显示名称为“Andy”的人,因此我将其更改为以下内容:
ObservableCollection<Person> People
{
get {
var andys = new ObservableCollection<Person>();
foreach (var person in directory.People)
{
if (person.Name == "Andy")
{
andys.Add(person);
}
}
return andys;
}
set { directory.People = value; }
}
上面的代码将完美地填充 GridView,但如果我执行以下操作,它不会更新它
Private Void AddAndy()
{
directory.People.Add(new Person{ name = Andy2 });
//People.Add(new Person { name = Andy2 }); -- Doesn't work either
}
这意味着虽然 GridView 最初会填充,但任何其他更改都不会对 Grid 产生影响。我已经切换回直接查看 Directory.People,它会在添加人员时返回更新。
我检查了当我将这个人添加到“dirctory.People”时,它确实说列表中有一个新项目。
我可以做些什么来强制“People”变量识别出发生了变化,进而让 GridView 更新?
非常感谢,
安迪
【问题讨论】:
-
您需要了解和实施
INotifyPropertyChangedInterface。 -
@AndyJones 每次获得价值时都会创建新列表。创建一个列表并添加/删除项目。
-
在网格视图上使用过滤器,如stackoverflow.com/questions/5843537/…
-
感谢您的回复(好吧,Will 并没有这么多,但有些人喜欢通过上网来充实他们的一天)。这有点困难,因为我刚刚继承了应用程序,所以我不愿意做出巨大的改变,但我看到了创建和删除项目 dkozl 的大问题,尽管我希望整个网格会刷新(如如果我添加和删除了许多项目)。我之前尝试过这个过滤器,但显然实际的应用程序要复杂得多(在帖子中将其简化),这使得它变得困难,但我想我会再次尝试这种方法。
标签: c# wpf gridview mvvm observablecollection