Что самый чистый путь состоит в том, чтобы разрешить это при сохранении модели представления тестируемой?
Вы правы в том, что WPF дает нам диспетчер
, чтобы сделать многопоточную простую; Но если вы хотите отделить озабоченность с помощью шаблона MVVM, вам нужно будет реализовать другую стратегию резьбы.
Я всегда нашел Backgroundworker
класса более чем достаточно, чтобы удовлетворить это, толкая обновления обратно в тему пользовательского интерфейса, так что вы можете обновить наблюдаться в виртуальной технике
в VM и иметь Изменения распространяются на вид.
Хорошо, я получил эту работу! Спасибо 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).
Это позволяет просмотреть модернее быть более агностическим, когда дело доходит до резьбы, он делает код в тесте намного проще для управления.
Это довольно хорошо решается путем абстрагирования всей Вашей логики сложения/удаления/обновления наблюдаемых коллекций + любой другой сложной логики, которая в Вашем сценарии происходит на разных потоках.
Этот класс контроллера может отвечать за обновление ViewModel (он может иметь ссылку на ВМ по интерфейсу) на нужном потоке.
Один вариант здесь - выставить SynchroniationContext , используемый из в пределах ViewModel. Это механизм в классе FlowerWorker использует для синхронизации с использованием UI, не вводя зависимость от форм WPF или Windows, и позволяя ему работать с несколькими технологиями.
Это позволило бы вам обратно в поток пользовательского интерфейса, не принимая ссылку на самому пользовательской интерфейсе, включая диспетчер.