我有基于 MVVM 模式的 wpf 应用程序。 我遇到了烦人的问题,我不知道该如何解决。
我的应用程序是向导应用程序,当用户按下“Next”时,我在另一个线程(backgroundworker)中开始一些进展,当 bgWorker 启动时,他设置绑定(bind)到 Next 按钮的 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"/>
谢谢
最佳答案
我想知道如何解决它:
Application.Current.Dispatcher.BeginInvoke(new ThreadStart(() =>
{
CommandManager.InvalidateRequerySuggested();
}));
关于wpf - 按钮 isEnabled = true 在没有鼠标单击的情况下不起作用 WPF MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13218977/