0

我的 WPF ListView 控件有一个奇怪的行为。
ListViews ItemSource 是 Observable 集合。ItemSource 会定期更新。
当我选择其中一个项目然后选择其他项目并且没有更新项目时,一切正常。
但是当我选择一个项目时,女巫在我站立时更新,然后选择其他项目,现在我选择了两个项目而不是一个。
当我查看调试器时,我看到了 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;
        }
    }
4

2 回答 2

0

看起来您的复印机类使您的集合中的两个项目相等(我认为,从上面有限数量的代码中推断出这一点)。

如果 ListView 中的两个或多个项目相同(相等),则选择一个将选择所有项目,因为在选择逻辑中使用了相等比较器。

于 2012-04-10T11:43:00.790 回答
0

好吧,显然问题出在 ListView 项目对象的重写 GetHashCode() 方法上。哈希码包括其计算中的所有字段。我删除了所有字段(属性),现在被覆盖的 GetHashCode() 仅根据项目的 ID 计算哈希。它解决了这个问题。
我也重写了 Equals() 方法。
如果有人知道它为什么相关,我想知道。

于 2012-04-11T08:28:07.183 回答