У меня есть проблема, которую я не видел раньше.В моей службе просмотра у меня есть метод, который предназначен для запуска события «Занято», чтобы указать, что приложение находится в занятом состоянии (поэтому пользователь будет знать, что приложение «думает» и не зависает).
private bool isBusy;
public event EventHandler<EventArgs<bool>> BusyChanged;
public void ShowBusy(bool isBusy)
{
if (this.isBusy == isBusy) {return;}
this.isBusy = isBusy;
BusyChanged?.Invoke(this, new EventArgs<bool>(this.isBusy));
}
Этот метод вызывает событие BusyChanged, одно для isBusy (true) и одно для isBusy (false).Это событие связано со свойством mainViewModel, которое, в свою очередь, имеет связанный с ним элемент в пользовательском интерфейсе.
viewService.BusyChanged += (_, e) => mainWindowViewModel.IsBusy = e.Data;
На данный момент я использую простую цветовую схему, которая указывает, что занят или по умолчанию не занят.
Свойство «IsBusy» в MainViewModel имеет метод NotifyOfPropertyChange (который, конечно, реализует интерфейс INotifyPropertyChanged).
public bool IsBusy
{
get => this.isBusy;
set
{
this.isBusy = value;
NotifyOfPropertyChange(() => this.IsBusy);
}
}
И элемент XAML (как упомянуто) имеет триггер стиля DataTriggerпривязка к этому свойству.
<Ellipse x:Name="ActionStatusEllipse" Width="17" Height="17" HorizontalAlignment="Right"
Margin="0,0,10,0" VerticalAlignment="Center" >
<Ellipse.Style>
<Style TargetType="{x:Type Ellipse}" >
<Setter Property="Stroke" Value="#03A631"/>
<Setter Property="StrokeThickness" Value="4" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsBusy}" Value="False">
<Setter Property="Stroke" Value="#03A631" />
</DataTrigger>
<DataTrigger Binding="{Binding IsBusy}" Value="True">
<Setter Property="Stroke" Value="#E9F80C" />
</DataTrigger>
</Style.Triggers>
</Style>
</Ellipse.Style>
</Ellipse>
Когда я запускаю приложение, цвет не меняется должным образом.Однако, что странно, если я добавляю MessageBox после строки NotifyOfPropertyChange в свойстве IsBusy, то это работает.Я попробовал несколько вещей, но не могу решить эту проблему.Почему при добавлении MessageBox в свойство элемент UI может видеть изменение свойства, но не видеть его без MessageBox?Кто-нибудь еще видел такое поведение?Я надеюсь, что это описание проблемы достаточно ясно.