使用MultiValueConverter对DataGrid的列进行排序

时间:2013-02-15 07:40:11

标签: wpf xaml sorting datagrid imultivalueconverter

我有一个使用MultiValueConverter的textcolum数据网格。转换器有2个值。第一个依赖于当前Item,第二个依赖于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时是否可以对列进行排序?

1 个答案:

答案 0 :(得分:2)

我认为这与此处的问题相同:DataGridColumn SortMemberPath on MultiBinding

SortMemberPath期望属性的名称(例如“TotalDollars”)不是单独计算的行值。把它想象成标题,你为整列设置一次。您的转换器将返回一个类似15的数字,其中SortMemberPath需要一个绑定路径字符串。

可以想到两个选项:

  1. 在您的支持对象上提供计算属性(例如“AveragePrice”)并绑定到该对象。无需转换器或排序成员路径。

    public double AveragePrice
    {
        get { return TotalDollars / NumberToDivideBy; }
    }
    
  2. 指定OnSorting中的question事件处理程序。

  3. 希望它有所帮助。 :)