2011-09-18 83 views
1

我有一個包含rowdetailstemplate的數據網格的擴展器。wpf datagrid選擇+擴展器的問題

當我點擊datagrid行查看行詳細信息模板時,擴展器關閉!

任何人都知道爲什麼以及如何解決這個問題?

更新

原來,別的東西正在發生的事情:

的擴展都包含在一個TabItem的。當我點擊網格行時,TabControls.SelectionChanged觸發(WHY !!!?!?!!?!?!?!),然後重新計算和反彈數據。

所以真正的問題是爲什麼單擊一個DataGrid行導致Parent 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。