3

我的网页是一个实体框架实体。这些绑定到 WPF TreeView。我想对排序属性的 TreeView 中显示的所有网页进行排序。

代码

EDMX

实体框架 EDMX 实体

它的Subordinates属性返回零个或多个Webpages的集合。

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;
    }
}
4

1 回答 1

0

假设您的 Sort 属性是您在运行时用来确定顺序的字符串或整数,您可以在表达式中添加orderby部分。

TreeViewWebpages.ItemsSource = from Webpage root in db.Webpages.Include("Subordinates")
                           where root.Dominant == null
                           orderby root.Sort
                           select root;
于 2011-05-27T18:50:16.067 回答