我有一个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();
}
这是一个好方法还是我应该做的不同?因为在我的应用程序中,按钮位于控件上,而不是主窗口。
答案 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的评论帮助我找到了解决方案。