有条件地对WPF CollectionViewSource进行排序

时间:2013-11-07 21:17:11

标签: wpf

是否可以对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排序。

由于

2 个答案:

答案 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 => .........
    }
}