0

Control1と言うUserControlをロードするウィンドウがあります。ユーザーが新しい UserControl の特定のボタンをクリックすると、Control2 がウィンドウに読み込まれ、Control1 が消えるはずです。ここでも同じですが、ユーザーが次の UserControl のボタンをクリックすると、Control3 が読み込まれ、Control2 が消えます。たとえば、Control3 から Control2 に戻ることも可能です。

Window に最初のメイン UserControl をロードするのは簡単でした。これで十分です。しかし、ユーザーコントロール間の「ナビゲーション」を実装する方法に行き詰まっています。前にそのようなことをしたことはありません。WPF アプリに MVVM を使用しています。誰でもアイデアはありますか?

どうも。

編集:レイチェルの答えで、私は今、コマンドでこれを行い、コントロールを切り替えます:

<DataTemplate DataType="{x:Type ViewModel:MainControlViewModel}">
<my:MainControl />
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModel:ProductsControlViewModel}">
<my:ProductsControl />
</DataTemplate>


 <Grid>
<ContentControl Content="{Binding CurrentPageViewModel, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</Grid>

MainControlViewModel と ProductsControl でほぼ同じ:

 public ICommand LoadProductControlCommand
{
  get
  {
    if (_loadProductControl == null)
      _loadProductControl = new RelayCommand(LoadProductControl);
    return _loadProductControl;
  }
}

private void LoadProductControl(object notUsed)
{
  _mainWindowViewModel = (MainWindowViewModel) Application.Current.MainWindow.DataContext;
  _mainWindowViewModel.CurrentPageViewModel = new ProductsControlViewModel();
}

これは良い方法ですか、それとも別の方法にする必要がありますか? 私のアプリでは、ボタンはメイン ウィンドウではなくコントロール上にあるためです。

4

2 に答える 2

0

レイチェルのコメントは、解決策を見つけるのに役立ちました。

于 2013-03-20T12:34:57.770 に答える
0

次のように ContentPresenter を MainWindow に配置します。

<ContentPresenter Content="{Binding ActiveWidget}"/>

そしてViewModelで

public ViewModelBase ActiveWidget {get;set;} // Don't forget INotifyPropertyChanged!!

次に、s の適切なインスタンスを使用してDataTemplatefor eachを作成する必要があります。これに対する一般的な解決策については、この記事を参照してください。ViewModelUserControl

于 2013-03-12T16:51:47.233 に答える