2012-12-11 101 views
1

查找Wpf数据网格中的记录我有一个绑定到Observable成员集合的数据网格。现在我想通过输入成员名称在datagrid中找到成员。我试过IsTextSearchEnable属性,但它不搜索。这是我的xaml。通过输入

<DataGrid Name="dgOtherCharges" AutoGenerateColumns="False" RowHeight="25" Grid.Row="4" AlternatingRowBackground="{StaticResource AlternateRowBackgroundBrush}" Grid.ColumnSpan="3" IsTextSearchEnabled="True" TextSearch.Text="Name" 
       CanUserAddRows="False" HeadersVisibility="Column" SelectionUnit="Cell" ItemsSource="{Binding Path=MembersCollection,Mode=TwoWay}" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" 
       VerticalGridLinesBrush="{StaticResource GridLineColorBrush}" HorizontalGridLinesBrush="{StaticResource GridLineColorBrush}"> 
      <DataGrid.Resources> 
       <Style TargetType="{x:Type DataGridCell}"> 
        <Style.Triggers> 
         <Trigger Property="DataGridCell.IsSelected" Value="True"> 
          <Setter Property="Background" Value="{StaticResource ButtonSelectedBrush}" /> 
          <Setter Property="BorderBrush" Value="#A8E3FC" /> 
          <Setter Property="Foreground" Value="Black" /> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 
      </DataGrid.Resources> 

      <DataGrid.Columns> 

       <DataGridCheckBoxColumn Binding="{Binding IsCheck,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Width="50"> 
        <DataGridCheckBoxColumn.ElementStyle> 
         <Style TargetType="CheckBox"> 
          <Setter Property="HorizontalAlignment" Value="Center"/> 
          <Setter Property="VerticalAlignment" Value="Center"/> 
         </Style> 
        </DataGridCheckBoxColumn.ElementStyle> 
       </DataGridCheckBoxColumn> 
       <DataGridTextColumn Header="Member Name" Binding="{Binding Name,Mode=TwoWay}" IsReadOnly="True" Width="*"/> 


      </DataGrid.Columns> 
     </DataGrid> 

我需要一个快速的解决方案乡亲

回答

4
<TextBox TextChanged="TextBox_TextChanged"/> 

private void TextBox_TextChanged(object sender, TextChangedEventArgs e) 
{ 
     var view = CollectionViewSource.GetDefaultView((DataContext as MyViewModel).MembersCollection); 
     view.Filter = o => (o as Member).Name.Contains((sender as TextBox).Text); 
} 

我希望它足够快:)

+0

我明白这一点。你不介意在xaml中使用datagrid而不是单独的文本框 – lordhusnain

+0

你是什么意思? – Dtex

+0

我的意思是如何使用xaml中的IsTextSearchEnabled属性使数据网格可搜索 – lordhusnain

7

我就这个问题今天迷迷糊糊地找到解决同样的问题。虽然TextSearch显然在2012年不可用,但它目前是。

所以为了将来的参考,下面我现在的解决方案,这个问题有三个附加属性:IsTextSearchCaseSensitive,IsTextSearchEnabledTextSearch.TextPath

<DataGrid ItemsSource="{Binding Path=Directories, Mode=OneWay}" 
      SelectedItem="{Binding Path=SelectedDirectory, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
      EnableRowVirtualization="False" 
      EnableColumnVirtualization="True" 
      VirtualizingStackPanel.IsVirtualizing="False" 
      VirtualizingStackPanel.VirtualizationMode="Standard" 
      IsTextSearchCaseSensitive="False" 
      IsTextSearchEnabled="True" 
      TextSearch.TextPath="Name"> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn Header="Name" SortMemberPath="Name" /> 
    </DataGrid.Columns> 
</DataGrid>