0

検索してみましたが、答えが見つかりません。A と B の 2 つのユーザー コントロールを含むメインウィンドウがあります。どちらも別々の 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}" />

1 つのテキスト ボックスのテキストを変更すると、もう一方のテキスト ボックスも自動的に変更されます。

于 2012-12-18T08:29:48.580 に答える