1

xamlでViewModelにバインドされた親ビューがあります(viewmodelはxamlで宣言されています)。

この親ビューは、子ビューを表示できます(NavigationService、別名navigation:Frameを介して)。

親ビューがスコープ外になることはありませんが、新しい子ビューで親のViewModelを共有する必要があります。

これどうやってするの?子ビューのxamlで同じビューモデルを宣言すると、子ビューが独自のビューモデルインスタンスを取得することを意味するためです(つまり、親ビューと同じビューモデルインスタンスではありません)。

ありがとう!

4

3 に答える 3

2

(a)MEFを使用する絶好の機会のように思えます。ビューモデルをエクスポートしてから、親ビューと子ビューの両方にインポートします。デフォルトでは、それらは同じオブジェクトを共有します。または(b)静的プロパティを介して公開されたビューモデルインスタンスを追跡するロケータークラスを作成し、その静的プロパティを使用して親と子のビューモデルを取得します。

public static class Locator 
{
   private static readonly MyViewModel _instance = new MyViewModel();

   public static MyViewModel Instance 
   {
      get { return _instance; }
   }
}

public partial class MyView
{
    public MyView()
    {
       InitializeComponent();
       LayoutRoot.DataContext = Locator.Instance;
    }
}
于 2010-07-12T22:47:11.987 に答える
1

誰かが私に良い答えを与えるまで、私は次の解決策を使用します(私がまだ実際にテストしていないのでそれが機能する場合)。

私のハックソリューション:

ViewModelには、それ自体へのパブリック静的参照があります。次に、子ビューはそのDataContextをViewModelの静的参照に設定します。

乾杯。

于 2010-07-12T22:17:56.160 に答える
0

子ビューは親ビューからDataContextを継承するため、もう一度宣言したり割り当てたりする必要はありません。

于 2010-07-12T22:28:56.540 に答える