4

MSDN のドキュメントには次のように記載されています。

TwoWay または OneWayToSource であるバインディングは、ターゲット プロパティの変更をリッスンし、それらをソースに伝達します。これは、ソースの更新として知られています。通常、これらの更新は、ターゲット プロパティが変更されるたびに発生します。これは、チェック ボックスやその他の単純なコントロールでは問題ありませんが、通常、テキスト フィールドには適していません。キーストロークのたびに更新すると、パフォーマンスが低下する可能性があり、ユーザーが新しい値にコミットする前にバックスペースして入力エラーを修正する通常の機会が失われます。したがって、Text プロパティの既定の UpdateSourceTrigger 値は LostFocus であり、PropertyChanged ではありません。

更新がデータベースまたはネットワーク経由で直接行われる状況、またはデータが非常に大量の場合、TextBox で UpdateSourceTrigger = PropertyChanged を使用すると実際にパフォーマンスが低下する可能性があることを理解しています。

しかし、単純な DependencyProperty、または Entity Framework オブジェクトのプロパティを (コミットする前に) 更新するだけの場合、パフォーマンスへの影響は無視できないでしょうか?

編集中のオブジェクトの状態を追跡し、変更が行われたかどうかに応じて [保存] ボタンの外観を最適化する WPF アプリを作成しているため、不思議に思っています。変更を判断する最も簡単な方法は、関連する SourceUpdated の発生を適切にキャッチすることだと思いました。テキストボックスの UpdateSourceTrigger = PropertyChanged の場合に最適に機能します。これは、ユーザーが「保存可能な」変更があるという即座のフィードバックを受け取るためです。

4

2 に答える 2

1

パフォーマンスの低下について警告される理由は、ほとんどの場合、キーストロークごとにソースプロパティを更新する必要がある場合、プロパティの値が変更されたときに何かが発生する必要があるためです。結局のところ、その「何か」が発生する必要がなければ、最終的に更新される限り、プロパティがいつ更新されたかは気にしないでしょう。

パフォーマンスへの実際の影響は、その「何か」が何であるかに完全に依存します。そして、それはあなたのアプリケーションに完全に依存しています。その「何か」が別の値をフォーマットして表示しTextBlockている場合、すべてのキーストロークでそれを行うことはおそらく目立たないでしょう。10,000行DataTableをフィルタリングDataGridし、それにバインドを更新する場合は、おそらくそうなります。

それで、あなたはどのように言いますか?ええと、2つの方法があります:

1)アプリケーションを理解します。ソースプロパティを更新するときにアプリケーションが何を実行しているかがわかっている場合は、すべてのキーストロークでそれを実行することが問題になるかどうかを予測できます。「最初は大丈夫なのかと思っていたのですが、気づいていない状況で実際に問題が発生する可能性があります」と言うと、「そうしないとどうなるか」ということです。ユーザーがキーを押したときにアプリケーションが何をしているのかわかりませんか?」

2)ユーザーがキーを押したときにアプリケーションが何をしているのかわからない場合は、プロファイルを作成します。

于 2011-06-30T18:08:35.423 に答える
1

アプリケーションに適していて、パフォーマンスの大幅な低下に気付かない場合は、 を に設定しても問題ありませUpdateSourceTriggerPropertyChanged。実際、Caliburn.Microなどの MVVM フレームワークを使用している場合は、これがすべての TextBox の既定の設定として設定されます。

于 2011-06-30T09:06:11.213 に答える