跨多个TabItem共享ListView

时间:2014-02-17 09:30:50

标签: c# wpf

我已经开始从事一个项目并且第一次使用WPF。我正在键入XAML并查看渲染结果,我遇到了可重用性问题。

我有一个带有三个标签的标签控件。每个选项卡都包含一个列表视图。每个列表视图在布局/结构方面都是相同的,但将保持不同的数据状态。以下是目前的情况:

<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 ?

编辑:在审核了Andy提供的答案并结合其他一些研究后,我使用了以下解决方案

<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>

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

最简单的方法是将ListView放在另一个Usercontrol中,并将ListView ItemSource设置为UserControl DataContext,并在所有三个选项卡中使用UserControl,这样您只需要将UserControl的dataContext设置为特定的集合基于标签