WPF фильтрует просмотренные элементы списка

Я работаю над простой галереей wpf, которая загружает изображения из папки. Имя файла каждого изображения также является его идентификатором. Моя цель просмотреть, например, фотографии № 2 и 3. Вот что я сделал до сих пор: XAML, содержащий список

<ListBox x:Name = "listBox" HorizontalAlignment = "Left" Height = "257" Margin = "46,25,0,0" VerticalAlignment = "Top" Width = "400" ScrollViewer.VerticalScrollBarVisibility = "Visible" Grid.Column = "1">
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <UniformGrid Rows = "3" Columns = "3"/>
            </ItemsPanelTemplate>

        </ListBox.ItemsPanel>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Image Source = "{Binding}"  Width = "120" Margin = "1"  MouseLeftButtonDown = "leftClickHandler"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

Установка источников изображений

public MainWindow() { 

        InitializeComponent();
        descriptionModel = new DescriptionModel();


        listBox.ItemsSource = Directory.EnumerateFiles(pathPhoto, "*.jpg");


    }

Я пытался использовать CollectionViewSource, но не знаю, как правильно его использовать. Я попытался добавить что-то вроде этого:

ICollectionView view = CollectionViewSource.GetDefaultView(listBox.Items);
        view.Filter = (o) => { return listBox.Items.GetItemAt(1); };

Но я получаю сообщение об ошибке «Код серьезности Описание Состояние подавления строки файла проекта Ошибка CS0266 Не удается неявно преобразовать тип "object" в "bool". Существует явное преобразование (вам не хватает приведения?)" Может ли кто-нибудь объяснить, что я делаю неправильно?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
45
1

Ответы 1

Фильтр работает на основе логического значения (true или false), которое возвращает ваша лямбда-функция.

Но вот в этом случае ваша лямбда-функция возвращает объект, который нельзя преобразовать в логическое значение (true или false).

Вам нужно изменить свою лямбду, чтобы вернуть логическое значение, как показано ниже.

используйте Contains из Items, что возвращает логическое значение.

ICollectionView view = CollectionViewSource.GetDefaultView(listBox.Items);
view.Filter = obj => { return listBox.Items.Contains(photo2_Object); };

или

view.Filter = obj => { return listBox.Items.Contains(photo3_Object); };

или

вы можете добавить всю логику, которую хотите, но, наконец, вернуть bool (true или false) из лямбда.

Это исправило ошибку, которую я получал, но все еще не изменило мое мнение. Кажется, что он переключается с показа всего (если лямбда возвращает true) или вообще ничего не показывает (если лямбда возвращает false). Не могли бы вы объяснить эту часть дальше?

ferals 16.03.2019 01:54

Извините, @ferals, я пропустил этот комментарий. Посмотрите stackoverflow.com/questions/17735994/…

Pavan Chandaka 18.03.2019 23:38

Посмотрите на принятый ответ. В нем есть объяснение о том, как обновить. stackoverflow.com/questions/17735994/…

Pavan Chandaka 18.03.2019 23:39

Другие вопросы по теме