问题描述
|
我的网页是一个实体框架实体。这些绑定到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;