Максим Ванюшкин: Разобрался как нужно сделать. Все работает, спасибо!
Для наглядного пояснения как происходит моргание добавил в сообщение ссылку на видео.
Максим Ванюшкин: Я, честно говоря, с MVVM еще до конца не разобрался.
Сейчас так:
есть ObservableCollection ID с полями Name, DiffCount, которая является полем класса Data, который создается в ViewModel. Во View (MainWindow) собственно экземляр ViewModel. Все операции с ID происходят только внутри Data.
Максим Ванюшкин: Ок, допустим я воспользуюсь обновлением вьюхи. Но тогда, нужно либо передавать ссылку на вьюху внутрь классов модели, что не есть хорошо, или же обрабатывать событие во вьюхе на изменение IDs, что приводит меня к принудительному вызову события PropertyChanged, чего я хотел избежать как раз.
Максим Ванюшкин: Ой, не кричите, пожалуйста. Данное решение было использовано в первую очередь на этапе проектирования/отладки. Если бы оно работало так, как должно, вопросов бы не было.
Как минимум на вашем примере, другой пример:
ViewModel: G-A-B-Z-D-H-R
View: A-B-D-G-H-R-Z
Изменяем Z на C:
ViewModel: G-A-B-C-D-H-R
View: A-B-D-G-H-R-C
Максим Ванюшкин: Мигания происходят потому что: элемент с чекнутым чекбоксом меняет свое положение в списке, в связи с чем чек бокс как бы создается заново и на нем рисуется галочка.
Максим Ванюшкин: Если я очищу коллекцию, то все ее элементы пропадут, а мне это ни к чему. Такого рода сортировка сработает, только если коллекция сразу полная, а у меня она пополняется и изменяются ее элементы с течением времени. Поэтому расположение элементов коллекции будет соответствовать порядку их добавления.
Представленная Вами сортировка сработает один единственный раз. При изменении коллекции элементы сортироваться не будут.
Мерцает, как я и написал - перерисовываются галочки у CheckBox'ов с частотой обновления данных. При том остальная часть перерисовывается без моргания и незаметно.
@carbon88 Мда. Видимо иначе не выйдет, а я надеялся. Так-то написана уже структура мной, которая решает эту проблему. Я надеялся на более простой случай. Т.к. производительность сильно падает в этом случае..
В вот с этого по подробнее, пожалуйста. Как посмотреть исходники decimal? И можно ли таким же способом посмотреть исходники других типов (их методов), в частности, интересует Double.ToString().
@aush decimal (От -7,9 x 10Е28 до 7,9 x 10Е28) / (10Е(0–28)) Так что вполне себе теряется.
Пример:
в double 0.000000000000000070906981940269849
в decimal 0.0000000000000000709069819403
К тому же переходить на decimal достаточно проблематично из-за совместимости и большим объемом занимаемой памяти.
@carbon88 Представленный здесь код в моем проекте, естественно, выглядит иначе. Просто по определенным причинам я не могу публиковать всё. Старался сделать наиболее понятным для возможности помощи в поиске ошибки, но, видимо, не удалось.
Качество кода, естественно стараюсь улучшать и книги себе помечаю.