Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 刷新视图时未触发CollectionView.filter委托_Wpf_Icollectionview - Fatal编程技术网

Wpf 刷新视图时未触发CollectionView.filter委托

Wpf 刷新视图时未触发CollectionView.filter委托,wpf,icollectionview,Wpf,Icollectionview,我有可观的收藏。我正在集合更改事件中应用筛选器。因此,我将在datagrid中获取过滤项。 请查找下面的代码片段 private void Button_Click_2(object sender, RoutedEventArgs e) { vm.Customers.Add(new Customer() { Name = "Customer1", OrderName = "Order1" }); vm.Customers.Add(new Custom

我有可观的收藏。我正在集合更改事件中应用筛选器。因此,我将在datagrid中获取过滤项。 请查找下面的代码片段

    private void Button_Click_2(object sender, RoutedEventArgs e)
    {
       vm.Customers.Add(new Customer() { Name = "Customer1", OrderName = "Order1" });
        vm.Customers.Add(new Customer() { Name = "Customer2", OrderName = "Order2" });
        vm.Customers.Add(new Customer() { Name = "Customer3", OrderName = "Order3" });
        vm.Customers.Add(new Customer() { Name = "Customer4", OrderName = "Order4" });
        vm.Customers.Add(new Customer() { Name = "Customer5", OrderName = "Order5" });
    }

     private void Customers_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        ICollectionView _customerView = CollectionViewSource.GetDefaultView(vm.Customers);
        if(_customerView!=null)
        {
            _customerView.Filter = delegate (object item)
            {
                Customer customer = item as Customer;
                return customer.Name.Contains("Customer3");
            };
        }
    }
输出:

我正在更新viewModel集合,然后刷新视图

 private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        vm.Customers = new System.Collections.ObjectModel.ObservableCollection<Customer>();
        vm.Customers.Add(new Customer() { Name = "Customer1", OrderName = "1" });
        vm.Customers.Add(new Customer() { Name = "Customer2", OrderName = "2" });
        vm.Customers.Add(new Customer() { Name = "Customer3", OrderName = "3" });
        ICollectionView _customerView = CollectionViewSource.GetDefaultView(vm.Customers);
        _customerView.Refresh();
    }
但未调用my view.filter委托。因此无法筛选集合

我的看法是:

<UserControl x:Class="WpfApplication3.UserControl1"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:WpfApplication3"

         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<UserControl.DataContext>
    <local:UserControlViewModel/>
</UserControl.DataContext>
<Grid>

    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
        <ColumnDefinition/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <DataGrid AutoGenerateColumns="True"  x:Name="list"  ItemsSource="{Binding Customers}"  />
    <Button Content="Add customers" Height="50" Width="100" Grid.Column="1" Click="Button_Click_2"/>
    <Button Content="Filter customer3" Height="50" Width="100" Grid.Column="2" Click="Button_Click"/>
    <Button Content="Add items" Height="50" Width="100" Grid.Column="3" Click="Button_Click_1"/>
</Grid>
当通过按钮单击刷新视图时,请任何人帮助我启动筛选器代理


谢谢不要创建新的收藏-您将获得不同的收藏视图!该collectionView未连接到该视图

请尝试清除集合:

private void Button_Click_1(object sender, RoutedEventArgs e)
{
    vm.Customers.Clear();
    vm.Customers.Add(new Customer() { Name = "Customer1", OrderName = "1" });
    vm.Customers.Add(new Customer() { Name = "Customer2", OrderName = "2" });
    vm.Customers.Add(new Customer() { Name = "Customer3", OrderName = "3" });
    ICollectionView _customerView = CollectionViewSource.GetDefaultView(vm.Customers);
    _customerView.Refresh();
}