2

DataBinding に大きく依存する WPF アプリケーションを開発しています。

基本的に、アプリには複数のタブシートがあり、それぞれに ViewModel への DataBinding を使用して最大 50 の要素があります。一部のバインディングは、バインディング結果などに基づいて画像を表示するためのデータトリガーとコンバーターを使用して少し複雑です。

アプリケーションを起動したときのパフォーマンスは良好ですが、各タブシートをナビゲートすると、ますます遅くなります (そして CPU 使用率が増加します)。たとえば 10 個のタブをナビゲートした後、アプリケーションはほとんど使用できなくなり、バインディング ソースが PropertyChanged イベントを発生させるたびに数秒間ハングします。

表示されていないビジュアル要素 (現在のタブシートとは異なるタブシートにあるため) を対象とするバインドがまだ処理中であり、コンバーターを実行して、ビジュアル コントロールを更新しているようです。

これを無効にする方法はありますか?表示されていないタブのすべてのバインディングを無効にする独自の TabControl を実装するオプションがありますが、これを行う方法はまだ見つかりません。

他の提案をいただければ幸いです。

補足として、それは重要かもしれません: すべてのバインディング ソースは、viewmodel でデバイスから値を読み取っている時間である ~5 秒ごとに独自の PropertyChanged を発生させます。したがって、約 5 秒ごとに INotifyPropertyChanged を実装する約 300 個のオブジェクトが同時に PropertyChanged イベントを発生させ、この瞬間にアプリケーションが数秒間フリーズします。

アプリケーションの性質上、更新を 5 秒以上遅くするオプションはありません。

4

1 に答える 1

1

私はMVVMではありませんが、MVVMではアクティブなタブのみがレンダリングされたと思いました。

非MVVMでは、アクティブなタブであるかどうかを検出するすべてのプロパティに対して、アクティブなタブでない場合は何も返さないか、デフォルト値を返します。 TabControlプロパティを持っていSelectedIndexます。

于 2012-11-10T14:12:57.747 に答える