我的视图模型中有一个绑定到ObservableCollection
的WPF DataGrid。我有上下文菜单操作来向上或向下复制行,即在当前所选行的上方或下方插入具有相同内容的新行。这一切都运行良好,但新插入的行似乎是另一行的副本。修改一个也修改了它的副本。这不是我想要的;我希望每一行都是分开的。以下是我在视图模型中的代码,用于向下复制行:
private void DuplicateDownward()
{
CPWrapper row = GetSelectedRow();
if (row == null)
return;
Channels.Insert(SelectedRow + 1, new CPWrapper(row.InnerCP));
}
Channels
是ObservableCollection<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,系统会认为它们不一样。
任何建议都将不胜感激。