2

View と View-Model の間に双方向バインディングが含まれている場合、次のイベントを持つ INotifyPropertyChanged インターフェイスを実装します。

// Summary:
//     Occurs when a property value changes.
event PropertyChangedEventHandler PropertyChanged;

しかし、INotifyPropertyChanged を実装せずに同じことを行うことはできますか?

4

4 に答える 4

2

(INPC)を実装できない場合INotifyPropertyChanged(またはバインド先のソースがない場合) は、ビュー モデルでバインドしたいものをラップする必要があり、ビュー モデルはそのために INPC を実装します。おそらく、その他のクラスにデータを取得/設定する必要があります。

于 2012-08-27T16:00:26.083 に答える
1

明示的な実装を避けたい場合はINotifyPropertyChanged、PostSharp などのコード ウィービング ツールを使用できます。次に、実装INotifyPropertyChangedは次のように簡単になります

[NotifyPropertyChanged]
public class Shape
{
    public double X { get; set; }
    public double Y { get; set; }
}

詳細については、http : //www.sharpcrafters.com/solutions/notifypropertychanged#を参照してください。

于 2012-08-27T10:26:37.270 に答える
1

もちろんできます。ビューモデルが変更されたときにビューを更新する簡単な方法を失うだけです。今、それを克服する方法があります。

  1. を再適用するDataContextと、すべてのバインディングが再度評価されますが、これには非常にコストがかかります。
  2. UI で、目的のプロパティのバインディングを取得し、 UpdateTargetを呼び出します。

しかし明らかに、これらはすべて非常に奇妙な回避策です。また、INotifyPropertyChanged を実装していないオブジェクトへのバインディングは、通常は遅くなることにも言及する価値があります。

于 2012-08-27T15:46:42.427 に答える
0

私はノーと言うでしょう。何らかの方法で INotifyPropertyChanged を実装する必要があります。そうしないと、双方向でのバインドが機能しません。

于 2012-08-27T13:28:53.057 に答える