2013-08-19 37 views
1

我有一个自定义DataGridColumn,它是为了促进动画而创建的。我更新的列的列是可排序(由框架提供)之前,加价低于对WPF中的自定义DataGridColumn排序

<controls:ResourceDataGrid x:Name="resourceDataGrid" 
          HorizontalAlignment="Stretch" 
          VerticalAlignment="Stretch" 
          AutoGenerateColumns="false" 
          GridLinesVisibility="None" 
          RowHeaderWidth="0" 
          CanUserAddRows="True" 
          CanUserDeleteRows="True" 
          ItemsSource="{Binding Path=Resources, 
                Mode=TwoWay, 
                UpdateSourceTrigger=PropertyChanged, 
                IsAsync=True}" 
          dataAccess:DataGridTextSearch.SearchValue="{Binding ElementName=searchBox, 
                       Path=Text, 
                       UpdateSourceTrigger=PropertyChanged}" 
          dataAccess:DataGridTextSearch.IsAnyTextMatch="False"> 
    <controls:ResourceDataGrid.Columns> 
     <!--<DataGridTemplateColumn CellTemplate="{StaticResource readOnlyCellUpdatedStyle}" IsReadOnly="True"/>--> 
     <DataGridTextColumn Header="KeyIndex" Binding="{Binding KeyIndex}" IsReadOnly="True"/> 
     <DataGridTextColumn Header="FileName" Binding="{Binding FileName}" IsReadOnly="True"/> 
     <DataGridTextColumn Header="ResourceName" Binding="{Binding ResourceName}" IsReadOnly="False"/> 
    <controls:CollectionTextColumn Collection="ResourceStringList" Visibility="Collapsed"/> 
</controls:ResourceDataGrid.Columns> 

示出了新的列如上述评论,这就是防止了柱被排序。对于DataGridTemplateColumn的代码如下

<DataTemplate x:Key="readOnlyCellUpdatedStyle"> 
    <TextBlock Text="{Binding KeyIndex, 
           NotifyOnTargetUpdated=True, 
           Mode=TwoWay}"> 
     <TextBlock.Style> 
      <Style TargetType="TextBlock"> 
       <Setter Property="Background" Value="Transparent"/> 
       <Style.Triggers> 
        <EventTrigger RoutedEvent="Binding.TargetUpdated"> 
         <BeginStoryboard> 
          <Storyboard> 
           <ColorAnimation Storyboard.TargetProperty="Background.Color" Duration="0:0:1.5" 
               From="Transparent" To="Orange" RepeatBehavior="1x" 
               AutoReverse="True"> 
            <ColorAnimation.EasingFunction> 
             <ExponentialEase EasingMode="EaseInOut"/> 
            </ColorAnimation.EasingFunction> 
           </ColorAnimation> 
          </Storyboard> 
         </BeginStoryboard> 
        </EventTrigger> 
       </Style.Triggers> 
      </Style> 
     </TextBlock.Style> 
    </TextBlock> 
</DataTemplate> 

我怎样才能让这个DataGridTemplateColumn排序?

谢谢你的时间。

回答

2

您需要设置SortMemberPathDataGridTemplateColumn

也许尝试:

<DataGridTemplateColumn SortMemberPath="KeyIndex" CellTemplate="{StaticResource readOnlyCellUpdatedStyle}" IsReadOnly="True"/> 
+0

人你的好... – MoonKnight

+0

我很困惑,这是如何工作虽然。我的'DataTemplate'是一个'TextBlock',所以我认为在DataGrid上排序会更加复杂,我们似乎将DataGridColumn的排序与TextBlock中的值混合在一起。在这里很愚蠢...... – MoonKnight

+0

我不认为它关心DataTemplate,它会对我的绑定属性进行排序,如果你想按照文本块中的实际文本排序,如果它不同于'KeyIndex',你将不得不得到更复杂的,就DataGrid而言,它只会按照它所知道的属性进行排序(KeyIndex,FileName,ResourceName) –