想象一下以下场景:我有一个DataGrid,我绑定到包含对象的列表。每个对象代表一个包含各种数据的行(名称,客户,服务器名称等)现在让我们说可以有相同的对象或行(名称,客户,服务器名称等)相同。
当我将列表绑定到DataGrid时,一切正常,我可以使用光标在网格中移动。但是,为了制作UnitTests,我已经覆盖了相关对象的Equals方法。像这样:
public override bool Equals(object obj2)
{
ConnectionDestination compareObject = obj2 as ConnectionDestination;
if (compareObject == null)
{
return false;
}
if ((this.Kunde != compareObject.Kunde) || this.Filiale != compareObject.Filiale || this.Bez != compareObject.Bez ||
this.Username != compareObject.Username || this.Password != compareObject.Password)
{
return false;
}
}
public override int GetHashCode()
{
return this.Kunde.GetHashCode() ^ this.Bez.GetHashCode() ^ this.Filiale.GetHashCode() ^ this.Servername.GetHashCode() ^ this.Username.GetHashCode() ^ this.Password.GetHashCode();
}
现在的问题是,一旦我有两个完全相同的行并且调用了Equals方法,DataGrid就会混淆并选择多行,或者当我在网格中移动时它会变得更加混乱。
因此,问题是:有没有办法进行适当的平等比较以防止此类问题的发生?
答案 0 :(得分:0)
行为是正确的,并遵循所有WPF列表实现选择逻辑的逻辑。我看到解决方法的唯一方法是在项目源中使用之前包装项目 如果您使用MVVM模式,这将导致每行ViewModel。
作为DataGrid的旁注:还要注意GetHashCode() - Method为相等的对象返回相同的值。否则,选择也会有问题。从您的示例中我不知道您是否覆盖了GetHashCode()。如果你重写Equals(),必须覆盖GetHashCode(),这不是一个真正的问题,我只想提一下。