首先你需要确定你想要的组件,主要我看到三个组件,LeftSide 导航窗格、TopSide 导航窗格和 MainContent 窗格。首先让我们谈谈 MainContent 窗格,我认为这样做的最佳方法是使用绑定和日期模板来动态制作它。在您的 ViewModel 或 DataContext 中,您需要有一个属性来表示要在 MainContent 中显示的内容,让我们调用它MainContent
,然后 MainContent 视图可以是 aContentControl
并将属性Content
绑定设置为 ViewModelMainContent
财产。这样,您只需为要显示的每个类项设置 DataTemplate。其他方式可能是使用选项卡控件并更改 ControlTemplate,这种方式不是动态的,因为您需要预定义将显示的所有内容。
现在,对于导航窗格,您可以使用任何控件,例如,您可以使用单选按钮并更改 ControlTemplate,并在视图模型中创建逻辑,例如使用命令。
现在,使用Grid
orDockPanel
取决于您希望应用程序做什么。如果你想要一个动态宽度,你应该使用 aGrid
和 a GridSplitter
,但是如果你想要固定宽度,你可以使用 a DockPanel
due 它比Grid
.
希望这个答案有所帮助,不要混淆。如有疑问请反馈。
编辑
例如,在视图模型中:
public class MainViewModel:INotifyPropertyChanged
{
public object Content {get; set;} //Here you must to raise the PropertyChanged event
private ICommand _showSummaryCommand
public ICommand ShowSummaryCommand
{
get { return new _showSummaryCommand ?? (_showSummaryCommand = new SomeCommandImplementation((sender,e)=>{Content = new SummaryViewModel()},true))} //most of commands implementations recive two parameters, an delegate to execute and a bool delegate for can excecute
}
}
对于视图,在一些资源字典中:
<DataTemplate TargetType="{x:Type ViewModels:SummaryViewModel}">
<DataGrid>
<!--Here goes what ever you want to show for instace-->
<TextBlock x:Name="descriptionText" Text={Binding Description}/>
</DataGrid>
</DataTemplate>
并在您将显示所有内容的地方
<!--....-->
<ContentControl Content={Binding Content}/>
<!--....-->
希望这段代码能帮助更多:)