そのような動作も必要な場合、モデルはINotifyPropertyChanged
インターフェイスを実装する必要があります。
class Model : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string someText = string.Empty;
public string SomeText
{
get { return this.someText; }
set { this.someText = value; this.PropertyChanged(this, new PropertyChangedEventArgs("SomeText")); }
}
}
class ViewModelA : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private Model data;
public Model Data
{
get { return this.data; }
set { this.data = value; this.PropertyChanged(this, new PropertyChangedEventArgs("Data")); }
}
}
class ViewModelB : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private Model data;
public Model Data
{
get { return this.data; }
set { this.data = value; this.PropertyChanged(this, new PropertyChangedEventArgs("Data")); }
}
}
同じモデル インスタンスを両方のビューモデルに渡してから、このようにコントロールにデータをバインドする必要があります。
ViewModelA を DataContext として使用する TextBoxA の場合
<TextBox x:Name="TextBoxA" Text="{Binding Path=Data.SomeText}" />
ViewModelB を DataContext として使用する TextBoxB の場合
<TextBox x:Name="TexTBoxB" Text="{Binding Path=Data.SomeText}" />
1 つのテキスト ボックスのテキストを変更すると、もう一方のテキスト ボックスも自動的に変更されます。