我想通过数据源进行ui虚拟化。
想法是“过滤”我发送给ui的内容(在我的例子中是一个列表框)。
我注意到itemsSource(一个可观察的集合)只读取一次,更改过滤器不会触发刷新…
我不明白为什么
谢谢
乔纳森
我会尽量说清楚:
我有收藏ViewSource:

<CollectionViewSource x:Key="MyItemView"
                                  Source="{Binding Path=Model.CurrentItem}" />

然后在我的列表框中使用此数据源:
<ListBox x:Name="myListBox"
                 ItemsSource="{Binding Source={StaticResource MyItemView}}"

我想实现一个转换器,它将返回一个过滤的集合(基于当前日期):
<ListBox x:Name="myListBox"
                 ItemsSource="{Binding Source={StaticResource MyItemView}, Converter={StaticResource FilterByTime}, ConverterParameter=CurrentDate }"

我是这样实现的:
public class FilterByTimeConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value != null)
            {
                System.Windows.Data.ListCollectionView list = value as System.Windows.Data.ListCollectionView;

                var model = DI.Resolve<ApplicationModel>();

                list.Filter = delegate(object item)
                {
                    bool r= (((MyModel)item).OriginalDate > model.TimeLine.CurrentDate.AddMonths(-1)
                        && (((MyModel)item).OriginalDate < model.TimeLine.CurrentDate.AddMonths(1)));

                   // Console.WriteLine ("{0}<{1}<{2} : {3}",model.MyListBox.CurrentDate.AddMonths(-1),((MyModel)item).OriginalDate ,model. MyListBox.CurrentDate.AddMonths(1),r.ToString());
                    return r;
                };

                return list;
            }

            return DependencyProperty.UnsetValue;
        }

这很好…但只有当布夫第一次。
当当前日期更改且筛选器更改时,列表不会更新。
也许我应该听听currentdate propertychange,但是我不知道该怎么做
谢谢
乔纳森

最佳答案

CollectionViewSource本身支持通过其Filter属性进行过滤。你为什么不把过滤逻辑放进去?

09-06 05:11