是否可以对WPF集合视图源进行条件排序?
<CollectionViewSource x:Key="MyCVS" Source="{Binding MyData}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="MyProperty1" Direction="Ascending" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
我想在某些条件下对MyProperty1进行排序,在其他条件下对MyProperty2进行排序。我可以在后面的代码中做到这一点。但如果有可能的话,我宁愿选择Xaml本身。
如果“MySortCondition”为真,则按MyProperty1排序,如果不按MyProperty2排序。
由于
答案 0 :(得分:0)
您是否可以编写转换器将MySortCondition
更改为相应的SortDescription
对象(可能必须自己在转换器中设置SortDescriptionCollection
...)?
答案 1 :(得分:0)
不幸的是SortDescriptions
不是很容易定制,因为tey是stucts
并且无法派生来添加这个逻辑,所以后面的代码将是你最好的选择。
var cvs = FindResource("MyCVS") as CollectionViewSource;
cvs.SortDescriptions.Clear();
if (condition)
{
cvs.SortDescriptions.Add(new SortDescription("Property1", ListSortDirection.Ascending));
}
else
{
cvs.SortDescriptions.Add(new SortDescription("Property2", ListSortDirection.Ascending));
}
或者......如果两个属性属于同一类型,则简单的方法是在类中创建Sort属性并在SortDescription
示例:
public int SortProperty
{
get
{
if (condition)
{
return Property1;
}
return Property2;
}
}
但在大多数情况下,首先使用Linq
更容易对基础集合进行排序public List<Type> MyData
{
get
{
return _data.OrderBy(x => .........
}
}