0

データのインスタンスへのListViewバインドがあります

ObservalbeCollection<ActivityItem> ActivityItems

            <ListView
                x:Name="ActivityItemsList"
                ItemsSource="{Binding ActivityItems}"
                ItemTemplate="{StaticResource Herke80ItemTemplate}"
                Header="{Binding DateFilterListBox.SelectedItem}" />

フィルターを実行するときに、ListView 内の ActivityItem にバインドされた ListViewItem を選択し、選択したフィルターに応じてその可視性を変更したいと考えています。

別の ObservableCollection インスタンスを保持することでこれを行っていました。つまり、データ インスタンスが複製されました。その後、それに応じてアイテムを削除または追加しました。これにより、ロード時間がかなりかかりました。そこで、1 つのバインディングを維持し、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 であるためです。

これを行う代替または正しい方法は何ですか?

4

1 に答える 1