0

MVVM パターンを使用して C# を使用しています。ビュー モデルを持つ 2 つの WPF ウィンドウがあります。基本的に、メイン ビュー モデルのプロパティを「子」ビュー モデルに渡す必要があります。現時点では、メイン ビュー モデルのコンストラクターで新しいビュー モデルに等しいプライベート変数を設定し、その際に子ビュー モデルのコンストラクターでプロパティを渡すことによってこれを行います。

ただし、コンボボックスで選択された項目のバインディングとして使用されるため、プロパティにリンクされた依存関係プロパティがあります。そのため、子ビューモデルが初期化された後に変更される可能性がありますが、コンストラクターでプロパティを渡すことで、自分の子ビューモデルに変更が加えられません。

それで、プロパティをコンストラクターに渡し、メインビューモデルで変更するときに子ビューモデルで変更する方法はありますか? または、メイン ビュー モデルのプロパティが設定されるたびに更新される子ビュー モデルにプロパティを作成する必要がありますか?

それが理にかなっていることを願っています。

編集メイン ビュー モデル内で、次のように宣言します。

public readonly DependencyProperty CurrentDatabaseManagedProperty = DependencyProperty.Register("CurrentDatabaseManaged", typeof(DatabaseInfo), typeof(MainViewModel));
public DatabaseInfo CurrentDatabaseManaged {
    get { return (DatabaseInfo)GetValue(CurrentDatabaseManagedProperty); }
    set { SetValue(CurrentDatabaseManagedProperty, value); }
}

public DatabaseInfo CurrentDatabaseManagedSelection {
    get { return CurrentDatabaseManaged; }
    set {
        if (CurrentDatabaseManaged != null &&
            (String.Equals(value.Name, CurrentDatabaseManaged.Name, StringComparison.OrdinalIgnoreCase))) return;

            CurrentDatabaseManaged = (value.IsUsable ? value : dbm.ReadDatabase(value.FileName));
        }
}

CurrentDatabaseManagedSelectionコンボボックスの SelectedItem はどこにありますか。メイン ビュー モデルのコンストラクターには、次のものがあります。

_DatabaseVM = new ChildViewModel(CurrentDatabaseManaged);

のコンストラクタはChildViewModel次のようになります。

public ChildViewModel( DatabaseInfo SelectedDatabase)
  {
    if (SelectedDatabase != null)
         _SelectedDatabase = SelectedDatabase;
    }
  }

_SelectedDatabase基本的には随時更新していきたいと思いCurrentDatabaseManagedSelectionます。

4

2 に答える 2

0

CurrentDatabaseManagedSelectionプロパティにバインドしたいようです。これをシミュレートする最も簡単な方法は、これをそのプロパティのセッターに追加することです。

_DatabaseVM._SelectedDatabase = value;

実際のバインディングでそれを行うには、次のようにする必要があります

  1. ChildViewModel._SelectedDatabase依存プロパティを作成し、
  2. MainViewModel実装する、INotifyPropertyChangedおよび
  3. PropertyChangedのセッターでイベントを呼び出しますCurrentDatabaseManagedSelection
  4. ChildViewModel伸ばす_DependencyObject
  5. プロパティを設定するだけでなく、バ​​インディングを設定します。

    BindingOperations.SetBinding(this, _SelectedDatabaseProperty,
      new Binding("CurrentDatabaseManagedSelection") { Source = mainViewModel });
    
于 2013-07-31T19:04:28.790 に答える