【问题标题】:WPF filtering viewed listbox itemsWPF过滤查看的列表框项目
【发布时间】:2019-03-15 22:39:13
【问题描述】:

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

【问题讨论】:

    标签: c# wpf listbox


    【解决方案1】:

    过滤器基于 lambda 函数返回的布尔值(true 或 false)工作。

    但在这种情况下,您的 lambda 函数返回一个无法转换为 bool(真或假)的对象。

    您需要更改您的 lambda 以返回一个布尔值,如下所示

    使用Items 中的Contains,返回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); };
    

    你可以添加所有你想要的逻辑,但最终从 lambda 返回 bool(true 或 false)。

    【讨论】:

    • 修复了我遇到的错误,但仍然没有真正改变我的观点。似乎它正在从显示全部(如果 lambda 返回 true)或根本不显示任何内容(如果 lambda 返回 false)切换。你能进一步解释这部分吗?
    • 对不起@ferals,我错过了这条评论。查看stackoverflow.com/questions/17735994/…
    • 查看接受的答案。它有关于如何刷新的解释。 stackoverflow.com/questions/17735994/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    相关资源
    最近更新 更多