Вопрос скорее идеологический, как правильно подходить к задаче обновления данных в ModelView.
Имеем DataContext, к нему привязан класс ModelView где так же в нем есть функции обработки данных ObservableCollection. Операции связаны с большим объемом данных, по этому во время обработки ui интерфейс замораживается. Очевидно что можно использовать Task,Thread,BackgroundWorker, но .. Как только наступает работа с коллекциями, так возникает необходимость вернуться в поток с ui через Dispatcher, иначе возникает ошибка доступа из другого потока.
Но, 99% времени занимает работа именно с коллекциями, и возвращаться в ui поток приходится постоянно, что сводит на нет
все усилия выделить эту процедуру в отдельный поток.
Как идеологический более правильно решать такую задачу? Отключать DataContext на время обновления ?
P.S. в дополнение к дискуссии опубликую прототип ObservableCollection
с "пониженным" числом уведомлений NotifyChange
:) может пригодиться кому, хотя вещь простая.
public class ObservableCollectionExtension<T> : ObservableCollection<T>
{
private bool __isNotify = true;
protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
{
if (__isNotify)
base.OnCollectionChanged(e);
}
public void NotifyOff()
{
__isNotify = false;
}
public void NotifyOn()
{
__isNotify = true;
base.OnCollectionChanged(new
NotifyCollectionChangedEventArgs(
NotifyCollectionChangedAction.Reset));
}
public void ClearNoNotify()
{
NotifyOff();
ClearItems();
NotifyOn();
}
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Можно ли получить список глобальных хуков, которые установлены в системе в данный момент?
Замер скоростей поиска уникальных значений показал разницу в 2 раза
Мне необходимо отрисовать кодом представленный ниже элемент с помощью devexpress используя diagram controlТак как в devepress я новичок,то как вообще обычно...