wpf - 如何使用 EntityCollection 对象的 HierarchicalDataTemplate 对 WPF TreeView 进行排序?

标签 wpf entity-framework sorting treeview hierarchicaldatatemplate

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

代码

EDMX

Entity Framework EDMX entity

它的 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/

相关文章:

.net - 什么是 MVVM 限制?

wpf - 在 F# WPF MVVM 应用程序中绑定(bind)到 TextBox 的 TextChanged 事件

c# - 使用数据 MVC 3 .NET 填充多选列表

c# - 子类化数据表

python - 使用 Python 对两列进行数字排序,但顺序不同

c# - 触摸 WPF 中的 Bug?

c# - 在 Repository/UnitOrWork 之上使用服务类时,我应该将逻辑不适合 Repository 的常用数据访问代码放在哪里?

php - 在 codeigniter 中按限制排序

r - 对 dist() 的输出进行排序

wpf - 如何在 Windows 中制作安装程序 (exe) 文件