1

是否可以对 WPF 集合视图源进行条件排序?

<CollectionViewSource x:Key="MyCVS" Source="{Binding MyData}">
    <CollectionViewSource.SortDescriptions>
      <scm:SortDescription PropertyName="MyProperty1" Direction="Ascending" />
    </CollectionViewSource.SortDescriptions>
</CollectionViewSource>

我想在某些条件下对 MyProperty1 和在其他条件下对 MyProperty2 进行排序。我也许可以在后面的代码中做到这一点。但如果可能的话,我更喜欢 Xaml 本身。

如果“MySortCondition”为真,则如果不是按 MyProperty2 排序,则按 MyProperty1 排序。

谢谢

4

2 回答 2

0

你能写一个转换器把你MySortCondition变成合适的SortDescription对象吗(可能必须让SortDescriptionCollection你自己在转换器中......)?

于 2013-11-07T22:27:52.217 回答
0

不幸的是SortDescriptions,它们不是很可定制,因为它们是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 => .........
    }
}
于 2013-11-07T22:30:15.870 回答