c# - ListBox ItemsSource 动态过滤器 WPF

标签 c# wpf data-binding

我想通过数据源进行 UI 虚拟化。

这个想法是“过滤”我发送到 UI 的内容(在我的例子中是一个列表框)。

我注意到 ItemsSource(一个可观察的集合)被读取一次并且更改 Filter 不会触发刷新...

我不明白为什么 谢谢 乔纳森


我会尽量说得更清楚:

我有 CollectionViewSource:

<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 属性进行过滤。你为什么不把你的过滤逻辑放在那里?

关于c# - ListBox ItemsSource 动态过滤器 WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/435003/

相关文章:

c# - Microsoft azure 中的角色未记录到 WADLogsTable

带有 MVVM 的 C# 泛型,将 T 从 <T> 中拉出

c# - 将整数写入 OPC UA 服务器 - “not of the same type” 错误

c# - 将 ListView 绑定(bind)到 ObservableCollection 和 Linq

c# - 获取 ListView 的 ItemTemplate 中的当前有界对象

c# - 如何定期合并可观察对象?

c# - 将 Npgsql 文本类型转换为 C# 类型

c# - 禁用 SSL v3.0 并切换到 SHA 256 后 HTTPS 连接超时

.net - 有没有办法将 Setter 元素放入 EventTrigger 中?

c# - 数据绑定(bind)到列表框