2014-02-17 126 views
1

我已经开始了一个项目,并且第一次使用WPF。我正在输入XAML并查看渲染结果,并且遇到了可用性问题。跨多个TabItems共享ListView

我有一个带有三个选项卡的选项卡控件。每个选项卡将包含一个列表视图。每个列表视图在布局/结构方面都是相同的,但会保持不同的数据状态。下面是它看起来像现在:

<TabControl> 
    <TabItem Header = "Green"> 
    <ListView> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header="Header1" Width="100"/> 
       <GridViewColumn Header="Header2" Width="100"/> 
       <GridViewColumn Header="Header3" Width="100"/> 
      </GridView> 
     </ListView.View> 
    </ListView> 
    </TabItem> 
    <TabItem Header="Amber"> 

    </TabItem> 
    <TabItem Header="Red"> 

    </TabItem> 
</TabControl> 

在琥珀色和红色标签我不确定我是否需要复制并粘贴什么坐落在绿色标签或是否有这样做的更好的方式允许我在三个地方轻松地重用列表视图XAML?

编辑:回顾安迪提供的答案后加上一些额外的研究,我已经使用了以下解决方案

<Window.Resources> 
     <GridView x:Shared="False" x:Key="BaseListView"> 
      <GridViewColumn Header="Header1" Width="100" /> 
      <GridViewColumn Header="Header2" Width="100" /> 
      <GridViewColumn Header="Header3" Width="100" /> 
      <GridViewColumn Header="Header4" Width="100" /> 
      <GridViewColumn Header="Header5" Width="100" /> 
      <GridViewColumn Header="Header6" Width="100" /> 
      <GridViewColumn Header="Header7" Width="100" /> 
     </GridView> 
    </Window.Resources> 

    <DockPanel> 
     <ToolBarTray DockPanel.Dock="Top"> 
      <ToolBar> 
       <Button ToolTip="Upload HSBC Spreadsheet file"> 
        <Image Source="/Resources/Buttons/UploadButton.png" Height="32" Width="32"></Image> 
       </Button> 
      </ToolBar> 
     </ToolBarTray> 
     <TabControl> 
      <TabItem Header = "Green"> 
       <ListView View="{DynamicResource BaseListView}"> 
       </ListView> 
      </TabItem> 
      <TabItem Header="Amber"> 
       <ListView View="{DynamicResource BaseListView}"> 
       </ListView> 
      </TabItem> 
      <TabItem Header="Red"> 
       <ListView View="{DynamicResource BaseListView}"> 
       </ListView> 
      </TabItem> 
     </TabControl> 
    </DockPanel> 

回答

1

在实际资源使用方面,你不能让列表共享共同的看法,但你可以设计风格,所以你只需要创建一次。

注意这里的x:Shared属性,这意味着将为每个ListView创建一个新的视图实例。

<Window x:Class="WpfApplication2.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <Style TargetType="ListView" x:Shared="False"> 
      <Setter Property="View"> 
       <Setter.Value> 
        <GridView> 
         <GridViewColumn Header="Header1" Width="100"/> 
         <GridViewColumn Header="Header2" Width="100"/> 
         <GridViewColumn Header="Header3" Width="100"/> 
        </GridView> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Window.Resources> 
    <TabControl> 
     <TabItem Header = "Green"> 
      <ListView> 
      </ListView> 
     </TabItem> 
     <TabItem Header="Amber"> 
      <ListView> 

      </ListView> 
     </TabItem> 
     <TabItem Header="Red"> 
      <ListView> 
      </ListView> 
     </TabItem> 
    </TabControl> 
</Window> 
+0

谢谢,这是非常有趣的,我正在寻找的东西。 – BenM

0

最简单的方法是将ListView控件在另一个用户控件和ListView控件的ItemSource设置为用户控件的DataContext,并使用在所有的三个选项卡的用户控件,所以你只需要设置的DataContext的用户控件到特定的收藏基于标签