WPF-фильтрация просмотренных элементов списка - PullRequest
0 голосов
/ 16 марта 2019

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

<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 Не удается неявно преобразовать тип" объект "в" bool ". Явное преобразование существует (выпропустил актерский состав?) "Кто-нибудь может объяснить, что я делаю неправильно?

1 Ответ

0 голосов
/ 16 марта 2019

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

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

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

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

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) из лямбды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...