Сортировка столбца DataGrid с помощью MultiValueConverter

У меня есть сетка данных с текстовым столбцом, использующим MultiValueConverter. Преобразователь получил 2 значения. Первый зависит от текущего элемента, а второй — от TextBlock. Отображаемое значение - это то, что я хочу.

<TextBox x:Name="phases"></TextBox>
<DataGrid AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserResizeRows="False"
         ItemsSource="{Binding MySource}" RowDetailsVisibilityMode="Collapsed" RowHeaderWidth="0" 
          SelectionMode="Single">
    <DataGrid.Columns>
        <DataGridTextColumn Width="Auto" Header="Pos">
            <DataGridTextColumn.Binding>
                <MultiBinding Converter="{StaticResource MyMultiValueConverter}">
                    <Binding ElementName="phases" Path="Text" />
                    <Binding />
                </MultiBinding>
            </DataGridTextColumn.Binding>
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid >

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

<DataGridTextColumn.SortMemberPath>
    <MultiBinding Converter="{StaticResource MyMultiValueConverter}">
        <Binding ElementName="phases" Path="Text" />
        <Binding />
    </MultiBinding>
</DataGridTextColumn.SortMemberPath>

Но я получаю сообщение «Не удается найти управляющий элемент FrameworkElement или FrameworkContentElement для целевого элемента». ошибка. Я меняю на:

<DataGridTextColumn.SortMemberPath>
    <MultiBinding Converter="{StaticResource MyMultiValueConverter}">
        <Binding Path="Text" Source="{x:Reference phases}" />
        <Binding Path="" />
    </MultiBinding>
</DataGridTextColumn.SortMemberPath>

Тогда первая строка в порядке, но для второй я не могу получить currentItem.

Я пытаюсь использовать SortEvent, но я могу добавить только SortDescription без какой-либо логики (у меня это есть в моем конвертере).

Есть ли способ отсортировать столбец при использовании multiValueConverter?


person Alexandre Veya    schedule 15.02.2013    source источник
comment
Возможный дубликат DataGridColumn SortMemberPath в MultiBinding   -  person horns    schedule 22.12.2015


Ответы (1)


Я думаю, что это тот же вопрос, что и здесь: DataGridColumn SortMemberPath on MultiBinding

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

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

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

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

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

person Steve Cadwallader    schedule 22.03.2013