1

Show()メソッドではなくメソッドを介して開いているウィンドウの値の更新に問題がありますShowDialog()。私はMVVM次のようなバインディングを使用しています。

Value="{Binding Path=MainProgressValue, UpdateSourceTrigger=PropertyChanged}"

私のプロパティではINotifyPropertyChanged、UIの通知に使用しています。

正常に動作しましたが、新しいウィンドウを開きます

 window.DataContext = context;
 if (owner != null)
       window.Owner = owner;
 resultHandler = new ViewModelBaseClass.ResultHandler(context_RequestClosing);
 getDialogResultHandler = new ViewModelBaseClass.GetDialogResultHandler(context_GetDialogResultAction);
 context.RequestClosing += resultHandler;
 context.GetDialogResult += getDialogResultHandler;
 window.Show();

プログレスバーがあります。ウィンドウが表示され、メインスレッドはプログラムの続行を続行します。ただし、をDataContext呼び出すRaisePropertyChangedと、進行状況バーは更新されません。プログレスバーのあるウィンドウがメインスレッドとは別のスレッドを使用している可能性はありますか?

この値を更新するにはどうすればよいですか?

4

1 に答える 1

0

あなたの説明に基づく私の推測では、メインアプリケーションスレッドが何かをしている間にUIが更新されることを期待しています。メインのアプリケーションスレッドはUIスレッドであるため、この場合、UIスレッドはブロックされます。

ロードなどを実行し、進行状況の値を更新する「プログラム」部分をワーカースレッドに移動し(ThreadPoolを参照)、UIに更新を通知する場合は、Dispatcher.BeginInvolke()を使用します。あなたが見つけた例。これにより、メインUIスレッドで更新コードが実行されます。

于 2012-10-01T21:57:56.470 に答える