私は ASP.NET 開発者ですが、最近は WPF アプリケーションも開発しています。ASP.NET では、GridView のデータを更新する必要があるときはいつでもDataBind()
. しかし、WPF での代替手段は何ですか? 回避策として、現在INotifyCollectionChanged
データを更新するために実装しています。
1 に答える
実装を回避策と考えるべきではありません。INotifyCollectionChanged
これは、実際には WPF の優れた方法です。
(代わりにSystem.ComponentModel.BindingListを設定できることに注意してください。このリストにバインドされている WPF コントロールは、リストが変更されると自動的に更新されます。)
では、WPFではオブザーバー パターンが使用されているのに、ASP.NET では明示的なデータ バインディングが標準的な方法であるのはなぜでしょうか? これは、2 つの環境の性質の違いによるものです。
ASP.NET は、Web ページの作成と設定がすべてです。Web ページ自体は段階的に更新されません。ユーザーがポストバックを実行すると、まったく新しい Web ページが再作成されます。このため、バッチ処理アプローチを採用するのが効率的です。つまり、すべてのデータをアセンブルしてから、「OK、データの準備ができました。今すぐコントロールに入力してください」と言います。
リッチ クライアント アプリケーションでは、ユーザー インターフェイス コントロールは 1 回作成されますが、基になるデータはコントロールの有効期間内に変更されます。明示的なデータ バインディングを採用した場合、データが変更されるたびに、どのコントロールを更新する必要があるかを判断し、それぞれに対して "DataBind" を呼び出します。それはメンテナンスの頭痛の種です。バインディングを認識できる唯一のコンポーネントがコントロール自体であることをお勧めします。データは「変更しました」と通知するだけで、コントロールは独自の裁量で更新できます。