MVVM パターンに基づく wpf アプリケーションがあります。厄介な問題があり、どうすれば解決できるかわかりません。
私のアプリケーションはウィザード アプリケーションです。ユーザーが「次へ」を押すと、別のスレッド (backgroundworker) で進行を開始します。bgWorker の開始時に、CanMoveNext = false
次へボタンの isEnabled プロパティにバインドされ、bgworker が終了すると、CanMoveNext = に戻ります。真実;
CanMoveNext
UI を取得するIsEnabled = false
とすぐに表示されますが、isEnabled プロパティを 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"/>
ありがとう