首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绑定到具有重写的IsEqual方法的列表时的DataGrid标识问题

绑定到具有重写的IsEqual方法的列表时的DataGrid标识问题
EN

Stack Overflow用户
提问于 2011-08-08 16:45:45
回答 1查看 289关注 0票数 1

想象一下下面的场景:我有一个绑定到一个包含对象的列表的DataGrid。每个对象表示包含各种数据(名称、客户、服务器名称等)的行。现在,假设可以有相同的对象或行(其中名称、客户、服务器名称等)。是完全相同的。

当我将列表绑定到DataGrid时,一切正常,我可以用光标在网格中移动。然而,为了使Equals成为UnitTests,我重写了相关对象的Equals方法。如下所示:

代码语言:javascript
复制
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就会变得混乱,并选择多个行,或者当我在网格中移动时,它会变得更加混乱。

因此,问题是:有没有办法进行适当的平等比较,以防止此类问题的发生?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-08 16:49:48

行为是正确的,并且遵循所有WPF列表如何实现选择逻辑的逻辑。我看到的解决办法的唯一方法是在项目源代码中使用项目之前包装它们。

如果您使用MVVM模式,这将导致每行一个ViewModel。

作为DataGrid的附注:还要注意GetHashCode()-Method对于相等的对象返回相同的值。否则,选择也会有问题。从您的示例中,我看不出您是否覆盖了GetHashCode()。因为如果重写Equals()就必须重写GetHashCode(),所以这不是一个真正的问题,我只想提一下。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6979596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档