2011-09-18 6 views
1

rowdetailstemplate이있는 DataGrid가 포함 된 확장기가 있습니다.wpf datagrid selection + expander 문제

행 세부 정보 템플릿을 보려면 DataGrid 행을 클릭하면 확장기가 닫힙니다.

누구나 왜이 문제를 해결할 수 있는지 알고 있습니까?

업데이트

다른 무언가가 일어나고 있음을 밝혀 :

확장기는 모두 TabItem의에 포함되어 있습니다. 표 행을 클릭하면 TabControls.SelectionChanged가 실행되고 (이유는 무엇입니까?!?!?!?!?!) 데이터가 다시 계산되고 리바운드됩니다.

실제 질문은 DataGrid 행을 클릭하면 부모 TabControl의 SelectionChanged 이벤트가 실행되는 이유입니다. 여기 XAML는 다음과 같습니다

<Window xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" x:Class="BPPDemo.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:BPPDemo" 
    Title="BPP Demo" Height="600" Width="700" Loaded="Window_Loaded"> 

<Window.Resources> 
    <local:AddrStatusColorConverter x:Key="addressStatusColorConverter"/> 

    <local:BoolToVisConverter x:Key="boolToVisConverter"/> 
</Window.Resources> 

<DockPanel> 
    <Menu DockPanel.Dock="Top"> 
     <Menu.Items> 
      <MenuItem Header="File"> 
       <MenuItem Header="Open Assessment" Command="{Binding SelectAssessmentCommand}"></MenuItem> 
       <MenuItem Header="Import Properties" Command="{Binding ImportPropertiesCommand}"></MenuItem> 
      </MenuItem> 
      <MenuItem Header="Properties" Visibility="{Binding IsSelected, ElementName=tabProperties,Converter={StaticResource boolToVisConverter}}"> 
       <MenuItem Header="Delete All Properties" Command="{Binding DeleteAllPropertiesCommand}"></MenuItem> 
       <MenuItem Header="Resolve Invalid Addresses" Command="{Binding ValidateAddressesCommand}"></MenuItem> 
       <MenuItem Header="Select Situs" Command="{Binding SelectSitusCommand}"/> 
      </MenuItem> 
     </Menu.Items> 
    </Menu> 

    <DockPanel Margin="10"> 
     <TextBlock Text="{Binding Assessment.Name}" FontWeight="Normal" FontSize="24" Foreground="#FF5C9EB7" DockPanel.Dock="Top" Margin="0,0,0,10"/> 
     <TabControl SelectionChanged="TabControl_SelectionChanged"> 
      <TabItem x:Name="tabProperties" Header="Properties"> 
       <DataGrid ItemsSource="{Binding Properties}" AutoGenerateColumns="False" IsReadOnly="True" SelectedItem="{Binding SelectedProperty,Mode=TwoWay}"> 
        <DataGrid.Columns> 
         <DataGridTextColumn Header="Description" Binding="{Binding Description}"/> 
         <DataGridTextColumn Header="Cost" Binding="{Binding Cost,StringFormat='{}{0:c}'}"/> 
         <DataGridTextColumn Header="Year Acquired" Binding="{Binding YearAcquired}"/> 
         <DataGridTextColumn Header="Life In Years" Binding="{Binding LifeInYears}"/> 
         <DataGridTextColumn Header="Schedule" Binding="{Binding Schedule}"/> 
         <DataGridTextColumn Header="Current Value" Binding="{Binding CurrentValue,StringFormat='{}{0:c}'}" /> 
         <DataGridTextColumn Header="Tax" Binding="{Binding Tax,StringFormat='{}{0:c}'}" /> 

         <DataGridTemplateColumn Header="Address"> 
          <DataGridTemplateColumn.CellTemplate> 
           <DataTemplate> 
            <TextBlock Text="{Binding Address}" Foreground="{Binding AddressStatus, Converter={StaticResource addressStatusColorConverter}}"/> 
           </DataTemplate> 
          </DataGridTemplateColumn.CellTemplate> 
         </DataGridTemplateColumn> 
         <DataGridTextColumn Header="Address Status" Binding="{Binding AddressStatus}"/> 
         <DataGridTextColumn Header="Situs" Binding="{Binding Situs}"/> 
        </DataGrid.Columns> 

        <DataGrid.RowDetailsTemplate> 
         <DataTemplate> 
          <TextBlock>THIS ONE WORKS! WHY DOESN'T THE OTHER ONE????</TextBlock> 
         </DataTemplate> 
        </DataGrid.RowDetailsTemplate> 


       </DataGrid> 
      </TabItem> 
      <TabItem Header="Listings" Name="tabListings"> 

       <DataGrid x:Name="SitusGroups" AutoGenerateColumns="false" SelectionMode="Single" SelectionUnit="FullRow"> 
        <DataGrid.Columns> 
         <DataGridTextColumn Header="Situs" Binding="{Binding Situs,StringFormat='{}{0:c}',TargetNullValue='none'}"></DataGridTextColumn> 
         <DataGridTextColumn Header="Cost" Binding="{Binding Cost,StringFormat='{}{0:c}'}"></DataGridTextColumn> 
         <DataGridTextColumn Header="Value" Binding="{Binding Value,StringFormat='{}{0:c}'}"></DataGridTextColumn> 
         <DataGridTextColumn Header="Tax" Binding="{Binding Tax,StringFormat='{}{0:c}'}"></DataGridTextColumn> 
        </DataGrid.Columns> 

        <DataGrid.RowDetailsTemplate> 
         <DataTemplate> 
          <TextBlock>I JUST WANT TO SEE THIS WHEN I CLICK ON A ROW!</TextBlock> 
         </DataTemplate> 
        </DataGrid.RowDetailsTemplate> 

       </DataGrid> 



      </TabItem> 
     </TabControl> 

    </DockPanel> 

</DockPanel> 

+0

XAML을 표시 할 수 있습니까? –

+0

내 업데이트보기, Davide. –

답변

1

문제는 이벤트가 전달되는 방식과 관련이있다. TabControl과 DataGrid는 동일한 클래스에서 파생되므로 DataGrid SelectionChanged에서 TabControl SelectionChanged 핸들러가 실행 중입니다.

http://www.trentfguidry.net/post/2009/06/13/WPF-TabControl-SelectionChanged.aspx의 마지막 주석에서 알 수 있듯이 내 이벤트 핸들러에서 원본 소스를 확인한 다음 참조가 내 tabcontrol이 아닌 경우 반환했습니다.