Общий контекст: приложение MVVM.Удаление/остановка раскадровки при изменении DataContext
У меня есть вид, называемый JobView. Его DataContext - это класс Job. В рамках Job это свойство называется AuthorizationNeeded.
Граница в виде имеет стиль (из ресурсного словаря), и этот стиль имеет триггер данных, который запускает и останавливает раскадровку на основе связанного свойства AuthorizationNeeded.
<Style x:Key="AuthorizationNeededBorder"
TargetType="Border">
<Setter Property="Background"
Value="Yellow" />
<Setter Property="Opacity"
Value="0" />
<Style.Triggers>
<DataTrigger Binding="{Binding AuthorizationNeeded, FallbackValue=False}"
Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard Name="Flash"
Storyboard="{StaticResource OneSecondOpacityFlash}" />
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="Flash" />
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
Все работает должным образом. Изменение значения AuthorizationNeeded запускает вспышку раскадровки при переходе к истине и удаляет (и останавливает) раскадровку при переходе на false.
Однако, если я изменяю DataContext JobView на другую ViewModel (другое задание), пока работает раскадровка, даже если значение параметра AuthorizationNeeded является ложным в новом задании, раскадровка продолжает работать.
Триггер данных не видит изменения значения из AuthorizationNeeded true -> false во время изменения DataContext.
Любые идеи о том, как я могу получить желаемое поведение AuthorizationNeed = true = хранилище, запущенное в AuthorizationNeeded = false = раскадровка, не работающая при любых обстоятельствах, будет принята с благодарностью. (Я бы предпочел не вручную изменять значение AuthorizationNeeded при изменении DataContext, потому что на самом деле в этом представлении много таких триггеров ...)
Ben, Большое спасибо за ваш ответ ... и я прошу прощения за мой медленный ответ на вас. Другие аспекты проекта взяли на себя какое-то время. Я не мог, к сожалению, получить событие DataContextChanged, но принял ваш совет по структуре v/vm. Хотя я был осторожен, чтобы выпустить дескрипторы (и отслеживать их, чтобы подтвердить), это был не хороший режим работы. Поэтому, исходя из ваших рекомендаций, я изменил структуру, чтобы освободить v/vms и создать чистые копии, когда это необходимо. Снова - большое спасибо за то, что нашли время, чтобы ответить. – Huw
Huw, Glad Я был в состоянии помочь! Как вы сказали, даже будучи осторожным со структурами и т. Д., Вы в основном завершаете построение эталонного подсчета, что добавляет много накладных расходов на систему. Удачи! –