WPF过滤查看的列表框项目

时间:2019-03-15 22:39:14

标签: c# wpf listbox

我正在研究从文件夹加载图像的简单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'。存在显式转换(您是否缺少演员表?)” 谁能解释我做错了什么?

1 个答案:

答案 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(是或否)。