我的WPF ListView控件有一个奇怪的行为
ListViews ItemSource是Observable集合.ProjectSource定期更新。
当我选择其中一个项目然后选择其他项目而没有更新项目时,一切正常。
但是当我选择一个项目女巫在我站立时更新,然后选择其他项目,现在我选择了两个项目而不是一个。
当我查看调试器时,我看到了SelectionChanged事件的事件参数。我看到添加的项目没问题,但没有删除项目。
谁知道问题是什么?
谢谢!
编辑:
我的可观察集合:
protected class CustomObservableCollection : ObservableCollection<T>
{
public void Refresh()
{
ListCollectionView lcv = (ListCollectionView)(CollectionViewSource.GetDefaultView(this));
lcv.Refresh();
}
}
当某个项目发生变化时调用的更新方法:
public void RefreshItem(T domainObject)
{
foreach (T item in obsCollection) {
if (!DomainObjectComparer.Equals(domainObject, item)) continue;
DomainObjectCopier.CopyProperties(domainObject, item);
obsCollection.Refresh();
break;
}
}
答案 0 :(得分:0)
看起来您的复印机类会使您的收藏中的两件物品相等(我认为,从上面有限的代码中推断出这一点)。
如果ListView中的两个或更多项相同(相等),则选择一个将选择所有项,因为在选择逻辑中使用了相等比较器。
答案 1 :(得分:0)
好吧,显然问题在于ListView项对象的重写GetHashCode()方法。 哈希码包含其计算中的所有字段。我重新删除了所有字段(属性),现在重写的GetHashCode()仅根据项目的ID计算哈希值。它解决了这个问题 我也重写了Equals()方法 如果有人知道为什么它是相关的,我想知道。