0

我有一个窗口,我在其上加载了一个用户控件,比如 Control1。现在,如果用户单击某个新的 UserControl 按钮,则 Control2 应该加载到 Window 上,并且 Control1 应该消失。同样在这里,当用户单击下一个 UserControl 按钮时,应该加载 Control3 并且 Control2 应该消失。也应该可以返回,例如从 Control3 到 Control2。

在我的 Window 上加载第一个主 UserControl 很容易,我已经做得足够多了。但我被困在如何实现用户控件之间的“导航”。以前从来没有做过这样的事情。我将 MVVM 用于我的 WPF 应用程序。有人有什么想法吗?

谢谢。

编辑:有了 Rachel 的回答,我现在在命令中执行此操作以切换控件:在 MainWindow 中:

<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

像这样在 MainWindow 中放置一个 ContentPresenter:

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

然后在 ViewModel

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

那么您必须DataTemplate为每个s 创建一个ViewModel适当的实例UserControl。有关此问题的通用解决方案,请参阅本文

于 2013-03-12T16:51:47.233 回答
0

Rachel 的评论帮助我找到了解决方案。

于 2013-03-20T12:34:57.770 回答