У меня есть приложение .NET CF с формой, содержащей сетку данных, которую я связал с BindingList, используя решение, полученное в основном из этой статьи: http://msdn.microsoft.com/en-us/library/aa480736.aspx
Я подключил его, чтобы при щелчке по заголовку столбца я получал информацию HitTest и проверял тип. Если типом является ColumnHeader, тогда я инициирую сортировку в базовом BindingList (используя код, аналогичный примеру, приведенному выше по ссылке), что, в свою очередь, заставляет саму DataGrid сортировать согласно свойству T, которое я щелкнул. Например. Описание
Это работает абсолютно нормально!
Проблема возникает, когда я теперь щелкаю вокруг своей сетки данных - скажем, у меня есть две строки, после сортировки строка не выбрана. Я щелкаю ячейку в строке 1, и у меня есть код, который выбирает всю строку - эта операция происходит, и все хорошо. Когда я теперь щелкаю строку 2, выбирается строка 2, и все в порядке, к сетке все еще применяется мой вид. Если я теперь снова щелкну строку 1, моя сортировка будет изменена, но, что важно, метод ApplySort фактически не вызывается. Так что же происходит? Это происходит только тогда, когда я щелкаю строку 1, две строки в таблице эффективно меняются местами. При выборе строки 2 это не происходит.
После отладки я вижу, что запускается mousedown (который я поместил в return; оператор), а затем срабатывает MouseUp, который выполняет HitTest и вызывает ApplySort, если был нажат заголовок столбца, чего в данном случае нет. Я заметил, что изменение в сортировке происходит * AFTER * элемент управления покинул событие MouseUp - поэтому что-то где-то, кажется, изменяет мое состояние сетки после завершения MouseDown / MouseUp.
Есть какие-нибудь идеи о том, какое событие / действие может портить мою сетку? По сути, я хочу знать, смогу ли я подавить что-либо и все остальное, как только я позвоню в свой ApplySort.