我有一个列表框,其中的项目填充了堆叠面板,例如:
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock x:Name="accessionNumber" Text="{Binding Path=accessionNumber}" />
<TextBlock Text="{Binding Path=orderRadDept}" Margin="20,0,0,0"/>
</StackPanel>
每个项中都有多个堆栈面板,每个堆栈面板都绑定到sql数据库中的不同值。
我正在尝试过滤/排序列表框项目,而不必每次都重新查询数据库。
例如,
IEnumerable<radOrder> filteredOrders2 =
dc.radOrders.Where(o => o.orderRadDept == "CT")
.OrderBy(o => o.orderDateTime);
OnScreenList.ItemsSource = filteredOrders2;
将通过查询数据库并返回我想要的项目来完成我需要做的事情。然而,如果我们这样做的话,我们的表现会有所损失。
我想做的是取OnScreenList
,然后对其进行排序/筛选,这是因为我遇到了问题。
这是我所了解的:
List<ListItem> list = new List<ListItem>(OnScreenList.Items.Cast<ListItem>());
list.Sort();
我一直在尝试引用列表项的数据成员。
如有任何帮助或提示,我们将不胜感激。
(很抱歉,如果这是一个愚蠢的问题。我正试图同时自学C#、SQL和wpf/xaml。)
我认为直接过滤ListBox
项不是一个好主意。我建议采取不同的方法。
创建一个列表AllItems
,该列表将从SQL数据库中填充一次。该列表将具有必须在列表框中显示的所有记录,换句话说,它将是可以显示的超级记录集。
创建另一个列表DisplayList
,该列表将用作您的ListBox
的ItemsSource
。
现在,每当您想对项目进行筛选时,请在AllItems
列表中应用该筛选器,并将结果存储在DisplayList
中。
通过这种方式,您不需要很长时间查询数据库,而且您可以轻松地过滤和排序DisplayList
列表