プログラムの構成
現在、アプリケーションで MVVMLight 4.1 フレームワークを使用しています。
のインスタンスをXViewModel
ラップするビューモデルがあります。などの多くのプロパティが含まれています。別の ViewModelにも別のインスタンスがあります。XClass
X
X
S
XClass
ビューモデル
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' の別のインスタンスがあり、両方のインスタンスを同期させたいからです。