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

Create multi panel application in WPF

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

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

您可以将各种面板放置在一个网格中,共享相同的 space(重叠)并更改可见性以使 "Visible" 只显示您想要显示的面板。 这个thecnique我之前用过,也兼容MVVM

我创建了一个 ContentPresenter 并将其绑定到 MainWindow ViewModel 并为每个 ViewModel 设置了 DataTemplate。

<ContentPresenter  Name="WindowContent" Content="{Binding CurrentPageViewModel}"/>

<Window.Resources>
    <DataTemplate DataType="{x:Type viewModels:MainViewModel}">
        <views:MainView />
    </DataTemplate>
</Window.Resources>

因此,当绑定 属性 发生更改时,ContentPresenter 会显示正确的 ViewModel 并且由于 DataTemplate,实际的 View。

public IPageViewModel CurrentPageViewModel
{
    get
    {
        return _currentPageViewModel;
    }
    set
    {
        if (_currentPageViewModel != value)
        {
            _currentPageViewModel = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("CurrentPageViewModel"));
        }
    }
}
private IPageViewModel _currentPageViewModel;

每个 ViewModel 都实现了简单的 IPageViewModel 接口,因此只能将 ViewModel 设置为 ContentPresenter 的内容。