ListView选择更改不会删除旧项目

时间:2012-04-10 07:26:39

标签: wpf listview observablecollection selectionchanged

我的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;
        }
    }

2 个答案:

答案 0 :(得分:0)

看起来您的复印机类会使您的收藏中的两件物品相等(我认为,从上面有限的代码中推断出这一点)。

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

答案 1 :(得分:0)

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