別のクラスのバックグラウンドワーカーから別に開いたウィンドウの進行状況バーを更新する際に問題が発生しています。個別のビューがバックグラウンドワーカーから更新されないMvvm
プログラムの実行はこのように書き:
- メイン・ウィンドウ負荷
- 背景労働者が仕事 とレポートを行いますいくつかの作業を行うと、ポップアップ プログレスバー(別ウインドウ)
- を開くためにクリックボタンポップアッププログレスバーに進む
- ポップアッププログレスバー うまくいきます。
値は、ステップスルーデバッガーのバックグラウンドワーカーによって正しく更新されているように見えるプロパティにバインドされています。これらの変更はポップアッププログレスバービューには反映されません。しかし、私が手作業でプログレスバーのプロパティ値を設定しようとすると、正常に動作するので、バインディングは壊れません。
また、最初に起動したMainWindowビューの内部に進捗バーを置くと、正常に更新されます。助言がありますか??ここで
はいくつかのコードです:完全なソリューションファイルについてはMainWindowViewModel
public class MainWindowViewModel: BaseViewModel
{
private void PerformSomeAction()
{
var popUpProgressBar = new PopUpProgressBarViewModel();
popUpProgressBar.Show(popUpProgressBar);
var worker = new BackgroundWorker { WorkerReportsProgress = true };
worker.ProgressChanged += delegate(object s, ProgressChangedEventArgs args)
{
if (args.ProgressPercentage != popUpProgressBar.Progresser)
{
Progresser = args.ProgressPercentage;
popUpProgressBar.Progresser = args.ProgressPercentage;
}
};
worker.DoWork += delegate
{
for (int i = 0; i < 101; i++)
{
worker.ReportProgress(i);
System.Threading.Thread.Sleep(10);
}
MessageBox.Show("Done");
};
worker.RunWorkerAsync();
}
private int _progresser;
public int Progresser
{
get { return _progresser; }
set
{
if (_progresser == value) return;
_progresser = value;
OnPropertyChanged("Progresser");
}
}
private RelayCommand _startProcessing; //set private member
public ICommand StartProcessing //public field used by xaml binding
{
get
{
return _startProcessing = MakeCommandSafely(_startProcessing,() => PerformSomeAction());
}
}
}
PopUpProgressBarViewModel
public class PopUpProgressBarViewModel : BaseViewModel
{
private PopUpProgressBar _popUpProgressBar;
public void Show(PopUpProgressBarViewModel context)
{
_popUpProgressBar = new PopUpProgressBar {DataContext = context};
_popUpProgressBar.Show();
}
private int _progresser;
public int Progresser
{
get { return _progresser; }
set
{
if (_progresser == value) return;
_progresser = value;
OnPropertyChanged("Progresser");
}
}
}
(起こっていただきましたので、あなたが見ることができる)、see here
いまいましいハハ、ちょうどその1行にPopUpProgressBarを変更することができます。ありがとうヒープ:) – Lukehb