You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF排序后VirtualizingWrapPanel文本换行异常问题求助

WPF VirtualizingWrapPanel排序后显示异常问题

我是WPF新手,开发了一款图书整理与编目程序,使用VirtualizingWrapPanel展示图书,排序前显示完全正常,但排序后显示出现异常。

  • 排序前视图:排序前图书列表
  • 排序后视图:排序后图书列表

相关XAML代码

<!-- DataTemplate for GridView -->
<DataTemplate x:Key="GridViewTemplate">
    <ListView ItemsSource="{Binding FilteredBooks}"
          SelectedItem="{Binding SelectedBook, Mode=TwoWay}"
          SelectionChanged="OnBookSelected"
          VirtualizingStackPanel.IsVirtualizing="True" 
          VirtualizingStackPanel.VirtualizationMode="Recycling">
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <virtualizingWrapPanel:VirtualizingWrapPanel Orientation="Horizontal" />
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel Width="160" Margin="5" ToolTip="{Binding Title}">
                <Image Source="{Binding CoverImage}" Height="240" Width="160" Stretch="UniformToFill" Margin="0,0,0,5"/>
                <TextBlock Text="{Binding Title}" TextAlignment="Center" FontWeight="Bold" TextWrapping="Wrap" />
                <TextBlock Text="{Binding Author}" TextAlignment="Center" TextWrapping="Wrap" />
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

排序实现函数

public async Task FilterAndSortBooks()
{
    var result = await Task.Run(() =>
    {
        IEnumerable<Book> filtered = Books;

        // Apply filter based on the selected filter option
        if (!string.IsNullOrWhiteSpace(SearchText))
        {
            filtered = SelectedFilter switch
            {
                "Title" => filtered.Where(book => book.Title.Contains(SearchText, StringComparison.OrdinalIgnoreCase)),
                "Author" => filtered.Where(book => book.Author.Contains(SearchText, StringComparison.OrdinalIgnoreCase)),
                "Release Year" => filtered.Where(book => book.Year.HasValue && book.Year.Value.ToString("yyyy").Contains(SearchText, StringComparison.OrdinalIgnoreCase)),
                _ => filtered
            };
        }

        // Apply sorting based on the selected sort option
        filtered = SelectedSortOption switch
        {
            "Title" => filtered.OrderBy(book => book.Title),
            "Author" => filtered.OrderBy(book => book.Author),
            "Release Year" => filtered.OrderBy(book => book.Year),
            _ => filtered
        };

        return filtered.ToList();
    });

    // Update FilteredBooks on the UI thread
    Application.Current.Dispatcher.Invoke(() =>
    {
        FilteredBooks.Clear();
        foreach (var book in result)
        {
            FilteredBooks.Add(book);
        }
    });
}

我希望排序后的视图与排序前一致,但无法找出原因,恳请帮助。

内容的提问来源于stack exchange,提问作者Raynking11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 10:45:15