在 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
的内容。
我正在开发 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
的内容。