Проблема идентификации DataGrid при привязке к списку с переопределенным методом IsEqual - PullRequest
0 голосов
/ 08 августа 2011

Представьте следующий сценарий: у меня есть 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 запутывается и выбирает несколько строк, или становится еще более хаотичным, когда я перемещаюсь поgrid.

Таким образом, вопрос: есть ли способ сделать правильное равное сравнение, чтобы предотвратить возникновение таких проблем?

1 Ответ

0 голосов
/ 08 августа 2011

Поведение является правильным и следует логике того, как весь список WPF реализует логику выбора.Единственный способ обойти это - обернуть элементы перед их использованием в источнике элементов.
Если вы работаете с шаблоном MVVM, это приведет к ViewModel на строку.

В качестве идентификатора дляDataGrid: также позаботьтесь о том, чтобы метод GetHashCode () возвращал одинаковое значение для одинаковых объектов.В противном случае выбор также будет иметь проблемы.Из твоего примера я не вижу, переопределил ли ты GetHashCode ().Так как обязательно переопределять GetHashCode (), если вы переопределяете Equals (), это не реальная проблема, я только хотел упомянуть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...