我试过搜索,但我找不到答案。我有一个包含两个用户控件A和B的主窗口。它们都有单独的ViewModel,但是从同一个modelinstance获取它们的数据。当我在usercontrol A中更改属性时,我希望它更新usercontrol B中的相应值。
似乎OnPropertyChanged("MyProperty")
仅更新同一ViewModel中的属性。我知道ViewModel B背后的数据与ViewModel A的数据相同,因为我可以使用刷新按钮手动刷新数据。
有没有简单的方法来刷新其他用户控件中的值?
答案 0 :(得分:0)
如果您需要此类行为,模型还必须实现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}" />
现在,当您更改其中一个文本框中的文本时,它将自动在另一个文本框中更改。