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





Фильтр работает на основе логического значения (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) из лямбда.
Извините, @ferals, я пропустил этот комментарий. Посмотрите stackoverflow.com/questions/17735994/…
Посмотрите на принятый ответ. В нем есть объяснение о том, как обновить. stackoverflow.com/questions/17735994/…
Это исправило ошибку, которую я получал, но все еще не изменило мое мнение. Кажется, что он переключается с показа всего (если лямбда возвращает true) или вообще ничего не показывает (если лямбда возвращает false). Не могли бы вы объяснить эту часть дальше?