我的网页是一个 Entity Framework 实体。这些绑定(bind)到 WPF TreeView。我想对排序属性的 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 中是无序的。
问题
如何更改它以对排序属性的 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;
}
}
最佳答案
假设您的 Sort 属性是您在运行时用来确定顺序的字符串或整数,您可以添加 通过 订购部分到你的表达。
TreeViewWebpages.ItemsSource = from Webpage root in db.Webpages.Include("Subordinates")
where root.Dominant == null
orderby root.Sort
select root;
关于wpf - 如何使用 EntityCollection 对象的 HierarchicalDataTemplate 对 WPF TreeView 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6156357/