【发布时间】:2015-09-09 14:32:13
【问题描述】:
我有一个 WPF DataGrid 绑定到我的视图模型中的 ObservableCollection。我有上下文菜单操作来向上或向下复制行,即在当前选定行的上方或下方插入具有相同内容的新行。这一切都很好,但新插入的行似乎是另一行的副本。修改一个也会修改它的副本。这不是我想要的;我希望每一行都是分开的。这是我在视图模型中向下复制行的代码:
private void DuplicateDownward()
{
CPWrapper row = GetSelectedRow();
if (row == null)
return;
Channels.Insert(SelectedRow + 1, new CPWrapper(row.InnerCP));
}
Channels 是 ObservableCollection<CPWrapper>(带有只读支持,仅使用 Clears 和 Inserts),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 和始终返回 false 的 Equals 之间,系统会认为它们不一样。
任何建议将不胜感激。
【问题讨论】:
-
不知道你想做什么,但请阅读:
IEquitable和 GetHashCode。