WPF:dynamic视图/内容

我在WPF有点初学者,所以我问这个..

比方说,我有一个窗口,窗口里面我想有一个像容器,可能只是边框或面板(以Winformforms)。 容器的内容绑定到选定的选项(例如:button)。 因此,例如,当用户select选项1时,容器显示图表; 当用户select选项2时,容器显示填充数据的列表视图; 当用户selectOPTION 3时,容器会显示另一个事物,依此类推。

什么是最好的/最好的(或者最简单的)方法来做到这一点? 我正在考虑使用用户控件的容器的内容,但不知道这是不是很好的解决scheme既不使用用户控件显示一点点复杂的事情,也许一些计算性能。 任何其他的想法家伙?

插图:

为了详细说明@Sheridan的答案,下面是一个简单的TabControl XAML,它可以满足你的需求:

 <TabControl TabStripPlacement="Left"> <TabItem Header="Option 1"> <Grid Background="DarkGray"> <TextBlock Foreground="AliceBlue" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" Text="View 1"/> </Grid> </TabItem> <TabItem Header="Option 2"> <Grid Background="DarkBlue"> <TextBlock Foreground="AliceBlue" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" Text="View 2"/> </Grid> </TabItem> <TabItem Header="Option 3"> <Grid Background="DarkSlateBlue"> <TextBlock Foreground="AliceBlue" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" Text="View 3"/> </Grid> </TabItem> </TabControl> 

结果:

在这里输入图像描述

您可以通过添加这个简单的Style到您的Window.Resources一点点定制它:

  <Window.Resources> <Style TargetType="TabItem"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="TabItem"> <RadioButton Content="{TemplateBinding Header}" Margin="2" IsChecked="{Binding IsSelected, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"/> </ControlTemplate> </Setter.Value> </Setter> </Style> </Window.Resources> 

然后导致:

在这里输入图像描述

“WPF心态”让你认为UI控件的function而不是外观,这是一个TabControl =)

我用ContentControl解决了这个问题

MainWindow:(定义你想作为资源可视化的视图)

 <Window.Resources> <DataTemplate DataType="{x:Type viewModels:SystemPCViewModel}"> <controls:SystemPCControl/> </DataTemplate> <DataTemplate DataType="{x:Type viewModels:ChipPCViewModel}"> <controls:ChipPCControl/> </DataTemplate> </ResourceDictionary> </Window.Resources> <Grid> <ContentControl Content="{Binding CurrentView}"/> </Grid> 

ViewModel :(不能简单得多)

 public ViewModelBase CurrentView { get { return currentView; } set { Set(() => CurrentView, ref currentView, value); } } 

在那里,你可以通过设置你在MainWindow定义的控件的视图模型来改变你的视图

 private void OnCommandExecuted() { CurrentView = someViewModel; } private void OnAnotherCommandExecuted() { CurrentView = anotherViewModel; } 

HTH!

您所描述的内容与标准的TabControl非常接近,但带有一个ControlTemplate ,它将标签放在左侧而不是内容面板上方。 使用这个方法将意味着在每个 TabItem都有一个UserControl ,例如。 多重控制。 您可以从MSDN的TabControl Class页面find更多有关TabControl的信息。