3

MVVM パターンに基づく wpf アプリケーションがあります。厄介な問題があり、どうすれば解決できるかわかりません。

私のアプリケーションはウィザード アプリケーションです。ユーザーが「次へ」を押すと、別のスレッド (backgroundworker) で進行を開始します。bgWorker の開始時に、CanMoveNext = false次へボタンの isEnabled プロパティにバインドされ、bgworker が終了すると、CanMoveNext = に戻ります。真実;

CanMoveNextUI を取得する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"/>

ありがとう

4

1 に答える 1

1

I figure how solve it:

            Application.Current.Dispatcher.BeginInvoke(new ThreadStart(() =>
            {
                CommandManager.InvalidateRequerySuggested();

            }));
于 2012-11-04T14:57:47.253 に答える