我有基于MVVM模式的wpf应用程序。 我有恼人的问题,我无法确定如何解决它。button isEnabled = true没有鼠标点击无法工作WPF MVVM
我的应用程序是向导应用程序,当用户按下“下一步”时,我开始在另一个线程(backgroundworker)中取得一些进展,当bgWorker开始时,他设置CanMoveNext = false
绑定到Next按钮的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"/>
感谢
只是胡乱出手,但你有没有尝试从UI线程设置属性?例如使用“Dispatcher.Invoke”设置CanMoveNext? – Blachshma
是的,没有成功 – Ofir
好吧我想通了 - 你的评论帮助我罚款解决方案 – Ofir