【发布时间】:2013-06-06 22:02:58
【问题描述】:
我有一个绑定到数据实例的ListView
ObservalbeCollection<ActivityItem> ActivityItems
<ListView
x:Name="ActivityItemsList"
ItemsSource="{Binding ActivityItems}"
ItemTemplate="{StaticResource Herke80ItemTemplate}"
Header="{Binding DateFilterListBox.SelectedItem}" />
当我运行过滤器时,我想在 ListView 中选择绑定到 ActivityItem 的 ListViewItem,并根据所选过滤器更改其可见性。
我通过保留另一个 ObservableCollection 实例来做到这一点,这意味着数据实例是重复的。然后我相应地删除或添加了项目。这占用了大量的加载时间。所以我想我会尝试保持一个绑定,并禁用或启用 UI 元素。
foreach (ActivityItem activityItem in ActivityItemsList.Items)
{
if (activityItem == null) continue;
var index = ActivityItemsList.Items.IndexOf(activityItem);
(ActivityItemsList.Items[index] as ListViewItem).Visibility = Visibility.Collapsed;
int startComparer = DateTime.Compare(activityItem.Start, selectedStartDate);
int endComparer = DateTime.Compare(selectedEndDate, activityItem.End);
if (OverdueToggleSwitch.IsOn)
{
(ActivityItemsList.Items[index] as ListViewItem).Visibility = Visibility.Visible;
}
else
{
if (startComparer >= 0 && endComparer >= 0)
{
(ActivityItemsList.Items[index] as ListViewItem).Visibility = Visibility.Visible;
}
}
}
ex 是 NullReferenceException,因为 ListViewItem 实际上不是 ListViewItem 而是 ActivityItem。
这样做的替代方法或正确方法是什么?
【问题讨论】:
-
您可以使用
ICollectionView。在 WPF 4.5 中,实时整形功能变得更加强大。 -
您好,这是针对 Windows 8 的,CollectionViewSource 似乎没有 GetDefaultView 方法。
-
我不是建议你使用默认的集合视图,而是创建你自己的实例。查看
ICollectionView的实现。
标签: c# wpf windows xaml data-binding