Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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
.net 带收集的转换器_.net_Wpf_Xaml_Collections_Converter - Fatal编程技术网

.net 带收集的转换器

.net 带收集的转换器,.net,wpf,xaml,collections,converter,.net,Wpf,Xaml,Collections,Converter,在WPF中,在我的XAML中,我有一个绑定在IEnumerable上的数据网格。收集项目有一个名为Sealed的属性。了解订单是否密封。所以我做了一个转换器,将它从一个列表切换到另一个列表。另外,当我从外部更改集合时,转换器不会被调用。但是如果我把窗户关上再打开,它就可以正常工作了 public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureI

在WPF中,在我的XAML中,我有一个绑定在IEnumerable上的数据网格。收集项目有一个名为Sealed的属性。了解订单是否密封。所以我做了一个转换器,将它从一个列表切换到另一个列表。另外,当我从外部更改集合时,转换器不会被调用。但是如果我把窗户关上再打开,它就可以正常工作了

      public object Convert(object value, Type targetType, object parameter,   System.Globalization.CultureInfo culture)
    {
        var collection = (ObservableCollection<OrderEntry>)value;
        var viewSource = new CollectionViewSource()
        {
            Source = collection,
        };
        viewSource.Filter += new FilterEventHandler(FilterInSealedOrderEntries);
        return viewSource.View;
    }

    private static void FilterInSealedOrderEntries(object sender, FilterEventArgs e)
    {
        var orderEntry = e.Item as OrderEntry;
        e.Accepted = orderEntry != null && orderEntry.Sealed;
    }
公共对象转换(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性) { var集合=(ObservableCollection)值; var viewSource=new CollectionViewSource() { 来源=收集, }; viewSource.Filter+=新的FilterEventHandler(FilterInSealedOrderEntries); 返回viewSource.View; } 私有静态无效筛选器密封的OrderEntries(对象发送方、筛选器目标方) { var orderEntry=e.作为orderEntry的项目; e、 Accepted=orderEntry!=null&&orderEntry.Sealed; }
{Binding Path=OrderEntries.Collection,Converter={StaticResource ViewNotSealedOrderEntryCollectionValueConverter}

在我的Xaml中

每当我更改属性时,都会调用
collectionContentChanged
,但不会调用转换器,知道我做错了什么吗


谢谢,如果不够清楚,我会评论的

IValueConverter接口还包含ConvertBack方法。我在您的代码中看不到这种方法,因为您在
绑定中为
数据网格
项资源
指定
值转换器
,只会在初始填充项时调用它

公共对象ConvertBack(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性){抛出新的NotImplementedException();}尝试在Visual Studio中分析输出窗口。它写入了所有绑定警告和例外是的,我看到了,但是,没有任何与dataGrid itemsSource相关的内容。如果我将断点设置为collectionContentChanged,它将通过但不会通过转换器。不太确定发生了什么。请设置断点以转换方法。我认为viewSource.Filter+=新的FilterEventHandler(FilterinesSealedOrderEntries)有问题;返回viewSource.View;阅读本文,使用CollectionViewSource.GetDefaultView()然后通过谓词进行过滤