在WPF窗口上加载多个UserControl

时间:2013-03-12 16:43:33

标签: wpf user-controls

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

在我的Window上加载第一个主UserControl很简单,我已经做得足够了。但我坚持如何实现Usercontrols之间的“导航”。从来没有做过类似的事情。 我使用MVVM作为我的WPF应用程序。有人有什么想法吗?

THX。

编辑: 在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();
}

这是一个好方法还是我应该做的不同?因为在我的应用程序中,按钮位于控件上,而不是主窗口。

2 个答案:

答案 0 :(得分:0)

将ContentPresenter放在MainWindow中,如下所示:

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

然后在ViewModel

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

然后您必须为每个DataTemplate创建一个ViewModel,其中包含UserControl的适当实例。有关此问题的通用解决方案,请参阅This Article

答案 1 :(得分:0)

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