0

プログラムの構成

現在、アプリケーションで MVVMLight 4.1 フレームワークを使用しています。

のインスタンスをXViewModelラップするビューモデルがあります。などの多くのプロパティが含まれています。別の ViewModelにも別のインスタンスがあります。XClassXXSXClass

ビューモデル

public XViewModelClass XViewModel : ViewModelBase
{
    public XClass X
    {
        get
        {
            return x;
        set
        }
            if(value == x)
            {
                return;                 
            }
            var oldValue = x;
            x = value;
            RaisePropertyChanged(XPropertyName, oldValue, x, true)
        }

    }
    private XClass x;
    public const string XPropertyName = "X"
}

ViewModel2

public YViewModelClass YViewModel : ViewModelBase
{
    public YViewModel()
    {
        Messenger.Default.Register<PropertyChangedMessage<XClass>>(this, message =>
        {
            X2 = message.NewValue
        });
    }

    public XClass X2
    {
        get
        {
            return x2
        set
        }
            if(value == x2)
            {
                return;                 
            }
            var oldValue = x2
            x2= value;
            RaisePropertyChanged(X2PropertyName)
        }

    }
    private string x2;
    public const string XPropertyName = "X2" 


}

モデル

public class X : ObservableObject
{
    public string S
    {
        get
        {
            return s;
        set
        }
            if(value == S)
            {
                return;                 
            }

            s = value;
            RaisePropertyChanged(SPropertyName)
        }

    }
    private string s;
    public const string XPropertyName = "S" 
}

問題

Xプロパティが変更されたとき (たとえばS、別の値に設定されたとき) にRaisePropertyChangedが呼び出されるようにするにはどうすればよいですかX。モデル内のすべてのプロパティに対してプロパティ変更メッセージを送信する必要がなければ、それが最善です。

背後にある理由はXClass、別の ViewModel に 'X2' の別のインスタンスがあり、両方のインスタンスを同期させたいからです。

4

1 に答える 1

0

プロキシモ、

子メンバーが設定されているときに X の PropertyChangedEvent を発生させることによって達成しようとしていることについて、より多くの情報を提供できますか? 通常、WPF では、バインドされているプロパティ/バッキング フィールドに対してそのイベントを発生させることだけに関心があります。

于 2013-05-01T03:56:56.483 に答える