2

私はWPFを初めて使用し、WinFormsのバックグラウンドを持っており、バインディングとイベント処理についてかなり基本的な質問があります。

Presentation責任の分離を維持するために、ビジネスオブジェクトのUIデータ部分を保持するだけのオブジェクトがたくさんありますDependency Properties。ビジネスオブジェクトには同様のデータが含まれていますが、データ型が異なる場合があるため、Presentationオブジェクトは表示目的。だから何かのような

public class MyPresentation
{
   // bunch of dependency properties
   public bool MyProperty
   {
      get { return (bool)GetValue(MyPropertyProperty); }
      set { SetValue(MyPropertyProperty, value); }
   }

   // Using a DependencyProperty as the backing store for MyProperty.  This enables animation, styling, binding, etc...
   public static readonly DependencyProperty MyPropertyProperty =
   DependencyProperty.Register("MyProperty", typeof(bool), typeof(MyPresentationObject), new UIPropertyMetadata(false, MyPresentationObject.MyPropertyPropertyChanged));

   MyBusinessObject RelatedBusinessObject { get; set;}

   public MyPresentation(MyBusinessObject businessObejct)
   {
      this.RelatedBusinessObject = businessObject;
   }


   public static void MyPropertyPropertyChanged()
   {
      // Do some stuff to related business objects
   }
}

のプロパティはMyPresentation、さまざまなコントロールにバインドされたデータであり、 Triggersなどを使用してプレゼンテーションの依存関係プロパティを変更します。これにより、OnPropertyChangedイベントでビジネスオブジェクトが変更されます。

私が持っている質問は、私が正しい方法でバインディングを使用しているかどうかです。通常(Winformsでは)クリックイベントなどを使用してビジネスオブジェクト(またはそれらのプレゼンテーションバージョン)の値を変更していましたが、これらの種類のイベントとその種類のイベント処理は、、、およびイベントを使用できるようになったためBinding、不要に思えます。TriggerOnPropertyChanged

私は何かが足りないのですか?

4

5 に答える 5

1

この方法でバインディングを使用するのは正しいです。また、モデルビュービュー-モデルパターンも確認してください。これは、実行しているものと似ていますが、より明確なテンプレートです。また、インターフェイスINotifyPropertyChangedを確認してください。これは、プロパティがローカルで変更されたことをトラップし、オブジェクトが変更されたことをビュー(フォーム)に通知するためのより一般的な方法です。そうすれば、両方の長所を活かすことができます。オブジェクトへの変更は、ボタンのクリックの結果として、またはバインディングの結果として発生する可能性があります。

于 2009-02-03T02:15:19.433 に答える
1

書く必要のない余分なコードを書いています。

まず、プレゼンテーション オブジェクトが値を渡すだけの場合は、ビジネス オブジェクトに直接バインドして仲介者を排除できます。

第二に、プレゼンテーション オブジェクトに依存関係プロパティは必要ありません。ビジネス オブジェクトのスタイリングとアニメーションは意味がありません。プロパティの通常の日常的なセッターを記述するだけで、UI -> プレゼンテーション オブジェクトに「プラグイン」できます。

あなたの例では、依存関係プロパティの使用は、自動プレゼンテーション オブジェクト -> UI の更新のみを取得します。

于 2009-02-03T10:40:59.147 に答える
1

ここでは、モデル ビュー ビューモデルのパターンを提示します。これにより、ビジネス オブジェクトに影響を与えることなく (ビジネス オブジェクトに INotifyPropertyChanged などの WPF を実装するなど)、バインディングと WPF のコマンドを最大限に活用できます。

于 2009-02-03T08:42:17.733 に答える
0

DependencyPropertiesには変更を処理するためのメカニズムが組み込まれているため、イベント処理の余分なレイヤーが削除されます。これはまだ存在しますが、WPFに組み込まれています。

ところで-しかし、誰かがすべてをさらに単純にするためのMVCの知恵を持っていると確信しています。

于 2009-02-03T01:53:17.013 に答える