我有一个以前从未见过的问题。 在我的视图服务中,我有一种方法旨在触发“忙”事件,以指示应用程序处于繁忙状态(因此用户将知道该应用程序在“思考”并且未挂断)。
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));
}
此方法将为isBusy(true)触发一个BusyChanged事件,为isBusy(false)触发一个事件。此事件与mainViewModel的属性绑定,该属性又在UI中具有绑定到它的项目。
viewService.BusyChanged += (_, e) => mainWindowViewModel.IsBusy = e.Data;
目前,我正在使用一种简单的配色方案,指示忙碌或默认为不忙。
MainViewModel中的“ IsBusy”属性具有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>
当我运行应用程序时,颜色没有按预期变化。但是,奇怪的是,如果我在IsBusy属性的NotifyOfPropertyChange行之后添加MessageBox,则它可以工作。我已经尝试了很多方法,但是似乎无法破解这个问题。为什么在属性中添加MessageBox会导致UI元素看到属性更改,但没有MessageBox却看不到它?有人看到过这种行为吗?我希望这个问题描述足够清楚。