数か月間 WinForms データ バインディングを使用しており、いくつかの問題に遭遇しました。
- 強力なタイピングの欠如
- コントロールを複雑なプロパティ (モデル/モデルのコレクション) にバインドできません
- null 値と特別な要件の動作をカスタマイズするのが難しい
- ソリューションを膨張させる .datasource ファイルを作成します
- 「ブラックボックス」として動作 – 問題の診断や機能の微調整が困難
ユーザー コントロールとモデル用にカスタマイズされたデータ バインディング ユーティリティの構築を検討しています。これはラムダ関数を介して強く型付けされ、複雑なプロパティをバインドでき、必要なその他の特別な機能を可能にします。バインディングは、おおよそ次のようなもので発生する可能性があります。
var binder = new Binder<Person>();
binder.Bind (p => p.FirstName, FirstNameText);
binder.Bind (p => p.Surname, SurnameText);
binder.Bind (p => p.BirthDate, BirthDatePicker);
binder.Bind (p => p.PersonType, PersonTypePicker); <-- Binds direct to PersonType model – not PersonTypeId value
binder.Bind (p => p.Interests, InterestsPicker); <-- Binds collection property to control’s collection property (automatically sync’s contents)
binder.DataSource = _selectedPerson;
質問:
1) このアプローチは推奨されていますか、それとも落とし穴ですか?
2)これをすべて行うサードパーティのユーティリティはありますか?
3) プロジェクトで複雑なデータ バインディング要件にどのように対処していますか?