我有基于MVVM模式的wpf应用程序。 我有烦人的问题,我无法解决如何解决它。
我的应用程序是向导应用程序,当用户按下“下一步”时我在另一个线程(后台工作者)中开始一些进度,当bgWorker启动时,他设置CanMoveNext = false
绑定到下一步按钮isEnabled属性,当bgworker完成后他退回CanMoveNext = true;
当CanMoveNext
获取IsEnabled = false
时,UI会立即显示,但在isEnabled propery设置回true后,UI会在鼠标单击或键盘按键后立即刷新。
我m changing the property I
使用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"/>
由于
答案 0 :(得分:1)
我想如何解决它:
Application.Current.Dispatcher.BeginInvoke(new ThreadStart(() =>
{
CommandManager.InvalidateRequerySuggested();
}));