我正在开发WPF MVVM应用程序,我想创建一个包含许多面板的Window,当用户从导航中选择另一个面板时,这些面板会发生变化。
我已阅读this文章但由于Can't put a Page in a Style
错误而无效。我找不到任何关于如何在单个窗口中创建导航不同面板的WPF应用程序的答案,我如何使用MVVM模式实现我想要的目标?
答案 0 :(得分:0)
您可以将各种面板放置在网格中,共享相同的空间(重叠)并更改“可见性”以使“可见”仅显示您想要显示的面板。 我之前使用过这个版本,并且与MVVM兼容。
答案 1 :(得分:0)
我创建了一个:id
并将其绑定到ContentPresenter
ViewModel并为每个ViewModel设置了DataTemplate。
MainWindow
因此,当绑定属性更改时,ContentPresenter会显示正确的ViewModel,并且由于DataTemplate,显示实际的视图。
<ContentPresenter Name="WindowContent" Content="{Binding CurrentPageViewModel}"/>
<Window.Resources>
<DataTemplate DataType="{x:Type viewModels:MainViewModel}">
<views:MainView />
</DataTemplate>
</Window.Resources>
每个ViewModel都实现了简单的public IPageViewModel CurrentPageViewModel
{
get
{
return _currentPageViewModel;
}
set
{
if (_currentPageViewModel != value)
{
_currentPageViewModel = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("CurrentPageViewModel"));
}
}
}
private IPageViewModel _currentPageViewModel;
接口,因此只能将ViewModel设置为IPageViewModel
的内容。