1

我有一个使用 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 时有什么方法可以对列进行排序?

4

1 回答 1

2

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

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

想到的两个选项:

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

    public double AveragePrice
    {
        get { return TotalDollars / NumberToDivideBy; }
    }
    
  2. 像在这个问题中一样指定一个OnSorting事件处理程序。

希望能帮助到你。:)

于 2013-03-22T10:45:17.317 回答