我有一个绑定到Observable Members集合的datagrid.现在我想通过键入成员名称在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>
Run Code Online (Sandbox Code Playgroud)
我需要一个快速解决方案的人
我今天偶然发现了这个问题,找到了同样问题的解决方案.虽然TextSearch显然在2012年没有,但它目前是.
因此,对于未来的参考,下面我对这个问题目前的解决方案有三个附加属性:IsTextSearchCaseSensitive,IsTextSearchEnabled和TextSearch.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>
Run Code Online (Sandbox Code Playgroud)
<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);
}
Run Code Online (Sandbox Code Playgroud)
我希望它足够快:)