2014-02-17 2 views
1

저는 프로젝트 작업을 시작했으며 WPF를 처음 사용하고 있습니다. XAML을 입력하고 렌더링 결과를보고 다시 사용성 문제가 발생했습니다.여러 TabItem에 걸쳐 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

가장 쉬운 방법은 그냥 된 UserControls에 대한 데이터 컨텍스트를 설정해야합니다 있도록 다른 UserControl을에서 ListView에 넣어 해당 UserControl의 DataContext에 ListView에 ItemSource을 설정하고, 모든 세 가지 탭에서 해당 UserControl을 사용하는 것입니다 탭을 기반으로하는 특정 컬렉션에

관련 문제