WPF DataGrid не может изменить выбранную строку: застрял в первой строке - PullRequest
2 голосов
/ 08 февраля 2011

Короче говоря, моя проблема в том, что WPF DataGrid не позволяет мне выбирать ничего, кроме первой строки. Когда я впервые заполняю его данными, ни одна строка не выделяется. Далее, независимо от того, на какую строку я нажимаю, загорается первая строка. Когда я связываю свойство SelectedItem с помощью OneWayToSource, я вижу, что строка правильная действительно выбрана. Если я решу щелкнуть еще раз в другой строке, ничего не произойдет: пользовательский интерфейс останется в первой строке, а свойство SelectedItem сохранит ранее правильное значение. На этом этапе я должен нажать Ctrl + клик по строке first , чтобы отменить выбор. Это позволяет мне повторить вышеописанную ситуацию.

Другими словами: - пользовательский интерфейс, кажется, не синхронизирован с тем, что фактически выбрано. - Ctrl-щелчок необходим для отмены выбора. - Ctrl-щелчок должен выполняться в первой строке, даже если свойство SelectedItem указывает, что выбрана другая строка.

Я понимаю, что это странное поведение. Я пытался скопировать его в отдельный проект, но безуспешно. Поэтому я просто добавляю это, чтобы посмотреть, есть ли у кого-нибудь идеи, почему он может так себя вести?

Единственное, что я не продублировал в своем отдельном проекте, - это использование MEF для подключения View / ViewModel. Все остальное тоже самое.

РЕДАКТИРОВАТЬ: Я только что заменил DataGrid на ListBox и у меня возникла та же проблема. Я использую Snoop, чтобы попытаться выяснить, что может быть применено к элементу управления, который так сильно изменит его поведение.

1 Ответ

3 голосов
/ 08 февраля 2011

Моя проблема заключалась в том, что объекты, которые я добавлял в DataGrid и ListBox, имели переопределенные функции Equals () и GetHashCode ().Они действительно испортили способ, которым оба элемента управления отображали, какой элемент был выбран, поэтому объяснили проблему SelectedItem.В конце концов, все проблемы были решены простым удалением / исправлением этих переопределений.

Woot!

...