我有一个基于MVVM模式的WPF应用程序。
我遇到了一个非常烦人的问题,但是我无法想出如何解决它。
我的应用程序是向导应用程序。当用户按下“下一步”按钮时,我会在另一个线程(后台工作器)中开始一些进度。当bgWorker启动时,他会设置CanMoveNext = false
,这个属性绑定到下一步按钮的isEnabled属性上。当bgworker完成时,他会将CanMoveNext设置回true;
当CanMoveNext
得到IsEnabled = false
时,UI立即显示它,但是当isEnabled属性重新设置为true时,UI只有在鼠标点击或键盘按键之后才刷新。
在我改变属性之后,我使用OnPropertyChanged()
方法,我甚至尝试使用CommandManager.InvalidateRequerySuggested();
,但仍然没有在没有鼠标单击的情况下刷新。
我该如何解决这个问题?
以下是我的代码:
public override bool CanMoveNext
{
get
{
return canMoveNext;
}
set
{
canMoveNext = value;
OnPropertyChanged("CanMoveNext");
}
}
public void StartProgress()
{
CanMoveNext = false;
InitBGworkers(out bgStartPersonalWorker);
bgStartPersonalWorker.RunWorkerAsync();
}
void bgStartPersonalWorker_DoWork(object sender, DoWorkEventArgs e)
{
DoStuff();
}
void bgStartPersonalWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
CanMoveNext = true;
//Even CommandManager.InvalidateRequerySuggested(); doen`t help
}
//XAML中的代码
<Button Content="{Binding ButtonNextCaption}" IsEnabled="{Binding CanMoveNext, UpdateSourceTrigger=PropertyChanged}" Command="{Binding Path=NavigateNextCommand}" Margin="5,0,5,0" Width="100" Height="40" FontSize="14" FontWeight="Bold"/>
谢谢
Dispatcher.Invoke
设置 CanMoveNext? - Blachshma