如何使用HierarchicalDataTemplate为EntityCollection对象对WPF TreeView进行排序?

问题描述

| 我的网页是一个实体框架实体。这些绑定到WPF TreeView。我想排序Sort属性上TreeView中显示的所有网页。 码 EDMX 其“下属”属性返回零个或多个网页的集合。 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,CultureInfo culture)
    {
        return null;
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return this;
    }
}
    

解决方法

        假设您的Sort属性是用于确定运行时顺序的字符串或整数,则可以在表达式中添加orderby部分。
TreeViewWebpages.ItemsSource = from Webpage root in db.Webpages.Include(\"Subordinates\")
                           where root.Dominant == null
                           orderby root.Sort
                           select root;
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...