2011-12-30 15 views
3

私はWPFの初心者であり、標準的なイディオムを学習しようとしています。私は6つのテキストボックスで構成されたメールアドレスをユーザーが入力できるようにするユーザーコントロールを持っています。 IMailAddressインターフェイスと、標準メールアドレスフィールドのプロパティのセットである具体的なクラスMailAddressも定義しました。WPFユーザーコントロールで非シンプルタイプの依存関係プロパティを使用するためのパターン

私は人のことをすべて保持するデータベースクラスを持つことができますが、このコントロールの特定のニーズに合わせてこのインターフェイスを実装することができます。

このタイプをコントロールに結びつける慣習的な方法は何ですか?私はそれを依存関係プロパティとして実装することはできますが、このような型では意味がありますか?私はそれを標準的なプロパティにして、値を変更したときにルーティングされたイベントを発生させる方が良いでしょうか?

私はこの具体的な例についてそれほど心配していませんが、より一般的には、これらのタイプのシナリオのベストプラクティスと考えられています。

答えて

1

依存関係プロパティとしてIMailAddressプロパティが公開されていることをユーザーコントロールで公開すると、完全に有効です。 WPF自体も同様のことを行います。たとえば、ItemsControlは、コレクションにコレクションをバインドすることを想定しているため、タイプIEnumerableItemsSource依存プロパティが公開されています。

ユーザーコントロールは、/カスタムコントロールは、ビューを表現するための良い方法であり、MVVMのfreakazoidsがない理由は、これがMVVMと完全に正常に動作することはできませんありません、そうでない場合は:)他にあなたを教えてはいけない - 例えば:

<local:MailAddressEditor 
    MailAddress="{Binding Path=Customer.BillingAddress}" 
    /> 

あなたが見たいと思うことの1つは、UserControlではなくCustom Controlです。これにより、アドレスの編集の背後にあるロジックに焦点を当てた「見た目のない」コントロールを構築し、コントロールのユーザーが独立してスタイルを作成してコントロールをレンダリングできるようになります。人々があなたのコントロールを使用すると、彼らが使用する可能性があります:

<local:MailAddressEditor 
    MailAddress="{Binding Path=Customer.BillingAddress}" 
    Style="{StaticResource SimpleInlineAddressEditor}" 
    /> 

<local:MailAddressEditor 
    MailAddress="{Binding Path=Customer.BillingAddress}" 
    Style="{StaticResource ComplicatedAddressEditorWithGoogleMapsSelector}" 
    /> 

をこの場合、私たちは、一つの制御を持っている2つのスタイル(そしておそらく2 ControlTemplates)でフィールドに異なるレイアウトを提供します。

カスタムコントロールは、WPF開発者にとって大きな資産です。すべてをMVVM経由で行う必要はありません。あなたのカスタムコントロールに入るコードを意識してください。ちょっと論理的になってしまったら、そのうちのいくつかをビューモデルに移したいかもしれません。

0

DependencyPropertiesは、INotifyPropertChangedがMVVMパターンを引き継いでいるため、一種の消えています。インターフェイス、データアクセス、およびビジネスロジックを適切に分離したい場合は、look at MVVM toolkitsを入力する必要があります。 DependencyPropertiesは引き続き使用できますが、ユーザーコントロールとのやりとりを実装するためにViewModelを構築することをお勧めします。 MVVMの目標の1つは、XAML以外の単体テストで検証可能なViewModelを提供することで、テスト容易性を向上させることです。

WPF用の優れたスターターMVVMツールキットはMVVM Lightです。より重いMVVMツールキットはPrismです。

関連する問題