我正在研究从文件夹加载图像的简单wpf画廊。每个图像的文件名也是它的ID。我的目标是查看例如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'。存在显式转换(您是否缺少演员表?)” 谁能解释我做错了什么?
答案 0 :(得分:0)
过滤器基于布尔值(true或false)工作,该布尔值由您的lambda函数返回。
但是在这种情况下,您的lambda函数返回了一个不能转换为bool的对象(真或假)。
您需要更改lambda以返回bool,如下所示
使用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); };
或
您可以添加所需的所有逻辑,但最后从lambda返回bool(是或否)。