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
相关产品推荐
相关产品推荐

