想象一下下面的场景:我有一个绑定到一个包含对象的列表的DataGrid。每个对象表示包含各种数据(名称、客户、服务器名称等)的行。现在,假设可以有相同的对象或行(其中名称、客户、服务器名称等)。是完全相同的。
当我将列表绑定到DataGrid时,一切正常,我可以用光标在网格中移动。然而,为了使Equals成为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就会变得混乱,并选择多个行,或者当我在网格中移动时,它会变得更加混乱。
因此,问题是:有没有办法进行适当的平等比较,以防止此类问题的发生?
发布于 2011-08-08 16:49:48
行为是正确的,并且遵循所有WPF列表如何实现选择逻辑的逻辑。我看到的解决办法的唯一方法是在项目源代码中使用项目之前包装它们。
如果您使用MVVM模式,这将导致每行一个ViewModel。
作为DataGrid的附注:还要注意GetHashCode()-Method对于相等的对象返回相同的值。否则,选择也会有问题。从您的示例中,我看不出您是否覆盖了GetHashCode()。因为如果重写Equals()就必须重写GetHashCode(),所以这不是一个真正的问题,我只想提一下。
https://stackoverflow.com/questions/6979596
复制相似问题