ObservableCollection中的项目重复

时间:2015-09-09 14:32:14

标签: c# wpf datagrid

我的视图模型中有一个绑定到ObservableCollection的WPF DataGrid。我有上下文菜单操作来向上或向下复制行,即在当前所选行的上方或下方插入具有相同内容的新行。这一切都运行良好,但新插入的行似乎是另一行的副本。修改一个也修改了它的副本。这不是我想要的;我希望每一行都是分开的。以下是我在视图模型中的代码,用于向下复制行:

    private void DuplicateDownward()
    {
        CPWrapper row = GetSelectedRow();
        if (row == null)
            return;

        Channels.Insert(SelectedRow + 1, new CPWrapper(row.InnerCP));
    }

ChannelsObservableCollection<CPWrapper>(只有只使用Clears和Inserts的readonly支持),而CPWrapper是一个包裹另一个对象的类(不重要)。 GetSelectedRow返回当前选定的DataGrid行,或返回null。

正如您所看到的,我正在从现有行插入一个新对象,它仍然像同一个对象一样。我甚至覆盖了CPWrapper中的一些函数,如:

public class CPWrapper
{
    private InnerObject cp;

    private static Random rand = new Random();

    private readonly int AntiCopy;

    public CPWrapper()
    {
        cp = new InnerObject();

        AntiCopy = rand.Next();
    }

    public CPWrapper(InnerObject arg)
    {
        cp = arg;

        AntiCopy = rand.Next();
    }

    public override int GetHashCode()
    {
        return AntiCopy.GetHashCode();
    }

    public override bool Equals(object obj)
    {
        return false;
    }
}

我希望在GetHashCode之间随机整数和Equals之间总是返回false,系统会认为它们不一样。

任何建议都将不胜感激。

0 个答案:

没有答案