2011-10-14 52 views
0

在WPF中,在我的XAML中,我有一个IEnumerable绑定的dataGrid。收集物品有一个称为密​​封的特性。要知道订单是否被封存。所以我制作了一个转换器,将它从一个列表切换到另一个列表。 Altought,当我从外部改变集合时,转换器没有被调用。但如果我关闭并重新打开它的窗口它工作正常。转换器集合

 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; 
    } 

{Binding Path=OrderEntries.Collection, Converter={StaticResource ViewNotSealedOrderEntryCollectionValueConverter}}

在我的XAML。

每当我改变属性,collectionContentChanged被称为,但不是转换器,任何想法我做错了什么?

谢谢,我会发表评论,如果它不够清楚。

回答

1

因为你在Binding指定ValueConverterDataGridItemsSource它只会被要求开始填充项目。

0

IValueConverter接口还包含ConvertBack方法。我没有看到这种方法在你的代码

+0

公共对象ConvertBack(对象值,类型targetType, 对象参数,System.Globalization.CultureInfo culture) {0}新增NotImplementedException(); } – Jonathan

+0

尝试分析Visual Studio中的输出窗口。它写入所有绑定警告和例外 – Artem

+0

是的,我看到,没有什么与dataGrid itemsSource相关。如果我设置了一个断点到collectionContentChanged,它会通过但不是由转换器。不太清楚发生了什么事。 – Jonathan