wpf datagrid 过滤数据两种方式?

1. 使用 visible 属性动态绑定

优点:实时性很高

缺点:耗资源

public class TaskVisibilityConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        var searchWord = values[0] as string;
        var item = values[1] as string;

        if (item.ToLower().Contains(searchWord.ToLower()))
            return Visibility.Visible;

        return Visibility.Collapsed;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
<DataGrid.RowStyle>
    <Style TargetType="DataGridRow">
        <Setter Property="Visibility">
            <Setter.Value>
                <MultiBinding Converter="{StaticResource M3u8TaskVisibilityConverter}">
                    <Binding ElementName="txtSearchWord" Path="Text" />
                    <Binding Path="Title" />
                </MultiBinding>
            </Setter.Value>
        </Setter>
      </Style>
</DataGrid.RowStyle>

2. 使用 CollectionViewSource 动态过滤

优点:代码可控

var collectionView = CollectionViewSource.GetDefaultView(dataGrid.ItemsSource);
collectionView.Filter = item =>
{
    var searchText = txtSearchWord.Text;
    var title = ((YourDataType)item).Title;
    return string.IsNullOrEmpty(searchText) || title.Contains(searchText);
};

 

posted on 2025-04-25 16:11  空明流光  阅读(34)  评论(0)    收藏  举报

导航