在WPF中创建多面板应用程序

时间:2017-08-24 14:22:33

标签: wpf mvvm panel

我正在开发WPF MVVM应用程序,我想创建一个包含许多面板的Window,当用户从导航中选择另一个面板时,这些面板会发生变化。

Desired application

我已阅读this文章但由于Can't put a Page in a Style错误而无效。我找不到任何关于如何在单个窗口中创建导航不同面板的WPF应用程序的答案,我如何使用MVVM模式实现我想要的目标?

2 个答案:

答案 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的内容。