0

他の 2 つのオブジェクトを含むクラスがあります。

要素にバインドされた最初のオブジェクトの変数、WPFそれを呼び出しますX

他のオブジェクトの同様の変数。

PropertyChanged イベントが発生したときに、2 番目のオブジェクトの変数が変更されるようにしたいと考えています。

これが私にとってはうまくいかないコードです:

変数を含むクラス: (プロパティ変更イベントに登録しました)

private Class1 _var1;
    public Class1 Var1
    {
        get { return _var1; }
        set
        {
            _var1= value;
            if (_var1!= null)
                _var1.PropertyChanged += new PropertyChangedEventHandler(_var1_PropertyChanged);
            else
                _var1.PropertyChanged -= new PropertyChangedEventHandler(_var1_PropertyChanged);
        }
    }

    void _var1_PropertyChanged(object sender, PropertyChangedEventArgs e)
    {
      if(e.PropertyName=="X")
        Var2.X= Var1.X;
    }

    private Class2 _var2;
    public Class2 Var2
    {
        get { return _var2; }
        set { _var2= value; }
    }

クラス 1:

    private int _x;
    public int X
    {
        get { return _x; }
        set
        {
            if (_x!= value)
            {
                _x= value;
                NotifyPropertyChanged("X");
            }
        }
    }

クラス 2:

public int X { get; set; }

PropertyChanged彼はクラス 1 で働いていますが、2 つの変数を含むクラスで作成したイベントに来ませんでした。なぜですか?

4

1 に答える 1

0

あなたの言いたいことを正確に理解しているかどうかはわかりませんが、一緒に変更したい 2 つの変数を持つクラスがある場合は、次のことを試してみます:
まず、いくつかのSetAndNotifyメソッドを定義しPropertyChangedます。

public void SetAndNotify<T>(ref T field, T value, Expression<Func<T>> exp)
{
    if (!Equals(field, value))
    {
        field = value;
        OnPropertyChanged(exp);
    }
}

このイベントを処理する基本クラスに追加します。

Var1第二に、変更イベントに登録し、何も設定しないための セッターで、それは意図的なものですか?

最後に、セッターで複数のプロパティを変更しても問題はありませんが、変更するのはパブリック プロパティであることを確認してください。

private SomeType privateVar1;
public SomeType PublicVar1
{
    get { return privateVar1; }
    set
    {
        SetAndNotify(ref privateVar1, value, () => PublicVar1);
        MyOtherPublicVar = someNewValue; // this will activate the property's setter.       
    }
}

これが役立つことを願っています。そうでない場合は、質問を明確にしてください。

于 2013-03-06T06:38:26.987 に答える