MultiBinding上的DataGridColumn SortMemberPath

时间:2012-06-25 16:22:07

标签: c# wpf xaml binding multibinding

我正在尝试对数字内容进行列排序。多重绑定转换器工作正常。 此解决方案将SortMemberPath设置为null

我尝试过多种方式,并大量搜索互联网。

出于安全考虑,代码已从原件进行了修改。

<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>

编辑: 我发现了一种在没有多重绑定的情况下使数据绑定工作的方法,但排序仍然不起作用。由于DataGrid绑定到一个自定义类,因此我接受了整个值并从中进行转换,从而减少了对MultiBinding的需求。

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

在这两个选项中,SortMemberPath默认设置为Binding,因此我不需要像我一样明确定义它

但是,最终将SortMemberPath值设置为null,这与适用于我的代码环境的自定义约束冲突,并且不进行排序。所以我仍然对更好的解决方案感兴趣。

编辑:

在其他位置更改了冲突的代码,以允许重复的SortMemberPath,不支持对某些列进行排序,以及对某些列的邻近列值进行排序

1 个答案:

答案 0 :(得分:7)

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

可以想到两个选项:

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

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

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