2012-06-25 7 views
5

Я пытаюсь сортировать столбцы по числовому контенту. Конвертер с несколькими связями работает нормально. Это решение установит SortMemberPath на нульDataGridColumn SortMemberPath on MultiBinding

Я пробовал разные способы и существенно помыл Интернет.

Код был изменен с оригинала в целях безопасности.

<DataGridTemplateColumn x:Name="avgPriceColumn"> 
<DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <TextBlock> 
      <TextBlock.Text> 
       <MultiBinding Converter="{StaticResource avgPriceConverter}"> 
        <Binding Path="NumberToDivideBy" /> 
        <Binding Path="TotalDollars" /> 
       </MultiBinding> 
      </TextBlock.Text> 
     </TextBlock> 
    </DataTemplate> 
</DataGridTemplateColumn.CellTemplate> 
<DataGridTemplateColumn.SortMemberPath> 
    <MultiBinding Converter="{StaticResource avgPriceConverter}"> 
     <Binding Path="NumberToDivideBy" /> 
     <Binding Path="TotalDollars" /> 
    </MultiBinding> 
</DataGridTemplateColumn.SortMemberPath> 
</DataGridTemplateColumn> 

EDIT: Я нашел способ получить привязки данных для работы без MultiBinding, но сортировка по-прежнему не работает. Поскольку DataGrid привязан к пользовательскому классу, я беру на себя всю ценность и конвертирую из него, тем самым уменьшая потребность в MultiBinding.

<DataGridTextColumn x:Name="avgPriceColumn" Binding="{Binding Converter={StaticResource avgPriceConverter}}" SortMemberPath="{Binding Converter={StaticResource avgPriceConverter}}" /> 

На обоих этих вариантов SortMemberPath является по умолчанию набор для связывания, так что я не нужно явно определить его, как я

Однако это заканчивается установка значения SortMemberPath обнулить, который конфликтует с пользовательскими ограничениями, применимыми к моя среда кода и не сортирует. Поэтому меня все еще интересуют лучшие решения.

EDIT:

Изменены противоречивый код в другом месте, чтобы дублирующие SortMemberPath лет, не поддерживают сортировку на некоторых столбцах, и для некоторого значения сортировки от соседних столбцов

ответ

6

SortMemberPath ожидают имя свойства (например «TotalDollars»), а не отдельное вычисляемое значение строки. Подумайте об этом, как в заголовке, вы установите его один раз для всего столбца. Ваш конвертер будет возвращать число, подобное 15, где SortMemberPath хочет строку пути связывания.

два варианта, которые приходят на ум:

  1. Обеспечить вычисляемое свойство на вашем бэк-объекте (например, «AveragePrice») и связывается с этим. Не требуется путь конвертера или сортировки.

    public double AveragePrice 
    { 
        get { return TotalDollars/NumberToDivideBy; } 
    } 
    
  2. Укажите обработчик события OnSorting как в этом question.

Надеюсь, это поможет. :)