0

我试图搜索,但找不到答案。我有一个包含两个用户控件 A 和 B 的主窗口。它们都有单独的 ViewModel,但从同一个模型实例中获取数据。当我更改用户控件 A 中的属性时,我希望它更新用户控件 B 中的相应值。

似乎OnPropertyChanged("MyProperty")只有在同一个 ViewModel 中更新属性。我知道 ViewModel B 背后的数据与 ViewModel A 相同,因为我可以使用刷新按钮手动刷新数据。

是否有任何简单的方法来刷新其他用户控件中的值?

4

1 回答 1

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}" />

现在,当您更改其中一个文本框中的文本时,它会自动更改另一个文本框中的文本。

于 2012-12-18T08:29:48.580 回答