Поточная обработка UI с ViewModels

  • Наборы, которые связываются в Представлении WPF, должны быть обновлены на потоке UI.
  • ViewModel выставляет набор
  • Поэтому, когда набор в ViewModel изменяется, он должен быть сделан в потоке UI
  • Лучшая практика должна сохранить ViewModels незнакомым с Представлением и по-видимому такими деталями как Диспетчер.

Что самый чистый путь состоит в том, чтобы разрешить это при сохранении модели представления тестируемой?

6
задан Jack Ukleja 21 January 2010 в 02:05
поделиться

4 ответа

Вы правы в том, что WPF дает нам диспетчер , чтобы сделать многопоточную простую; Но если вы хотите отделить озабоченность с помощью шаблона MVVM, вам нужно будет реализовать другую стратегию резьбы.

Я всегда нашел Backgroundworker класса более чем достаточно, чтобы удовлетворить это, толкая обновления обратно в тему пользовательского интерфейса, так что вы можете обновить наблюдаться в виртуальной технике в VM и иметь Изменения распространяются на вид.

1
ответ дан 17 December 2019 в 04:47
поделиться

Хорошо, я получил эту работу! Спасибо Cletus, вы послали меня в правильном направлении ... Мне пришлось использовать селектор детей, а затем выбрать каждого ребенка и изменить свои индивидуальные классы ... вот код ...

$j(function (){  
$j(".hoverBTN").hover( 
function() { 
    $j(this).children('div:nth-child(1)').addClass("hoveroverL");
    $j(this).children('div:nth-child(2)').addClass("hoveroverM");
    $j(this).children('div:nth-child(3)').addClass("hoveroverR");
}, function() {
    $j(this).children('div:nth-child(1)').removeClass("hoveroverL");
    $j(this).children('div:nth-child(2)').removeClass("hoveroverM");
    $j(this).children('div:nth-child(3)').removeClass("hoveroverR");
});

});

отлично работает таким образом. Я хотел что-то компактное и легко воспринимаемое, и я думаю, что это охватывает оба. Спасибо снова все ...

-121--3223120-

Одним из вариантов является создание подкласса наблюдательного элемента, которое переопределяет OnPropertyChanged и OnCollectionChanged и отправляет соответствующие события обратно в тему UI (через что-то вроде синхронизацииContext).

Это позволяет просмотреть модернее быть более агностическим, когда дело доходит до резьбы, он делает код в тесте намного проще для управления.

0
ответ дан 17 December 2019 в 04:47
поделиться

Это довольно хорошо решается путем абстрагирования всей Вашей логики сложения/удаления/обновления наблюдаемых коллекций + любой другой сложной логики, которая в Вашем сценарии происходит на разных потоках.

Этот класс контроллера может отвечать за обновление ViewModel (он может иметь ссылку на ВМ по интерфейсу) на нужном потоке.

1
ответ дан 17 December 2019 в 04:47
поделиться

Один вариант здесь - выставить SynchroniationContext , используемый из в пределах ViewModel. Это механизм в классе FlowerWorker использует для синхронизации с использованием UI, не вводя зависимость от форм WPF или Windows, и позволяя ему работать с несколькими технологиями.

Это позволило бы вам обратно в поток пользовательского интерфейса, не принимая ссылку на самому пользовательской интерфейсе, включая диспетчер.

3
ответ дан 17 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: