7

私はこのようなシナリオを手に入れました

Class Parent 
{
    Property  A;
 }

 Class A 
 {
      Property X
 }

PropertyChangedNotificationXが変更されたときにプロパティAを取得するにはどうすればよいですか?クラスAで「親」を参照したり、デカップリングを台無しにするようなイベントを参照したりしたくありません。私が基本的に欲しいのはを作ることParent.IsDirty==trueです。これは私の話の非常に単純化されたバージョンであり、Parentのような数十のクラスを取得したので、これを処理するための一般的な方法を探しています。

これは実際のコードではないことに注意してください。私はすべてのINotifyPropertyChanged実装を手に入れました。私はちょうどのような簡単なメカニズムを疑問に思っていますRaisePropertyChanged("A.X")

4

2 に答える 2

8

親クラスに propertychanged イベントの登録を試みることができます。コンストラクターで、イベントにサブスクライブできます。

public Parent()
{
    A.OnPropertyChanged += OnAPropertyChanged;
}

void OnAPropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName == "X")
        if(PropertyChanged != null)
             PropertyChanged(this, new PropertyChangedEventArgs("A"))
}

お役に立てれば...

于 2010-03-11T22:26:13.523 に答える
0

これがベストプラクティスかどうかはわかりませんが、次のようなものはどうでしょうか:

private Movie movie;
public Movie Movie
{
    get { return movie; }
    set
    {
        var oldProperties = typeof(Movie).GetProperties();
        foreach (var property in oldProperties)
        {
            if (property.GetValue(movie).GetHashCode() != value.GetType().GetProperty(property.Name).GetValue(value).GetHashCode())
            {
                RaisePropertyChanged(property.Name);
            }
        }

        movie = value;

    }
}

確かに、2つのオブジェクトとイベントハンドラーを取る外部ヘルパーにそれを外に出すことができます

于 2013-05-13T14:45:38.313 に答える