2012-12-11 7 views
1

Observable Members 컬렉션에 바인딩 된 DataGrid가 있습니다. 이제 회원 이름을 입력하여 DataGrid의 멤버를 찾고 싶습니다. IsTextSearchEnable 속성을 시도했지만 검색 중이 아닙니다. 여기 내 xaml입니다. Wpf DataGrid에서 레코드 찾기

<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

감사합니다. 별도의 텍스트 상자가 아닌 DataGrid로 xaml에 무엇인가 줄 마음이 있으십니까 – lordhusnain

+0

무엇을 의미합니까? – Dtex

+0

내가 xaml에서 IsTextSearchEnabled와 같은 속성을 사용하여 DataGrid를 검색 가능하게 만들 수 있음을 의미합니다. – 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> 
관련 문제