【发布时间】:2011-09-03 14:57:09
【问题描述】:
我的 网页 是一个实体框架实体。这些绑定到 WPF TreeView。我想订购 Sort 属性的 TreeView 中显示的所有 网页。
代码
EDMX
它的 Subordinates 属性返回零个或多个网页的集合。
XAML
<TreeView Name="TreeViewWebpages">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Webpage}"
ItemsSource="{Binding Subordinates}">
<TextBlock Text="{Binding Path=Title}" />
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
C#
TreeViewWebpages.ItemsSource = from Webpage root in db.Webpages.Include("Subordinates")
where root.Dominant == null
select root;
结果
网页在 TreeView 中是无序的。
问题
如何更改此设置以对 Sort 属性的 TreeView 中显示的所有 网页 进行排序?
更新
这个 ValueConverter 似乎可以工作(谢谢@KP Adrian 和@IVerzin)。有没有更好的办法?
XAML
ItemsSource="{Binding Path=Subordinates, Converter={local:SortConverter}}"
C#
[ValueConversion(typeof(EntityCollection<Webpage>), typeof(EntityCollection<Webpage>))]
public class SortConverter : MarkupExtension, IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return ((EntityCollection<Webpage>)value).OrderBy(o => o.Sort);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
}
【问题讨论】:
-
如果要同时对顶级页面和下级页面进行排序,请使用值转换器:stackoverflow.com/questions/5722835/…
-
是的,EntityCollection
没有实现 IList,但您可以将值转换为 EntityCollection 的实例并在其上调用 ToList()。 -- System.Collections.IList collection = (value as EntityCollection ).ToList(); -
请注意,这只有在您有一个 HierarchicalDataTemplate 时才会有效。如果您有多个由 DataType 属性选择的 HierarchicalDataTemplate,则使用此方法将对列表进行多次排序,这可能会减慢速度。我还没有找到绕过这个问题的解决方案。
标签: wpf entity-framework sorting treeview hierarchicaldatatemplate