【问题标题】:Sort Column of DataGrid using a MultiValueConverter使用 MultiValueConverter 对 DataGrid 的列进行排序
【发布时间】:2013-01-31 03:50:03
【问题描述】:

我有一个使用 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>

那么第一行就ok了,但是第二行就获取不到currentItem了。

我尝试使用 SortEvent,但我只能添加没有任何逻辑的 SortDescription(我的转换器中有它)。

使用 multiValueConverter 时有什么方法可以对列进行排序?

【问题讨论】:

标签: wpf xaml sorting datagrid imultivalueconverter


【解决方案1】:

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

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

想到的两个选项:

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

    public double AveragePrice
    {
        get { return TotalDollars / NumberToDivideBy; }
    }
    
  2. 指定一个OnSorting 事件处理程序,如question

希望对您有所帮助。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-12
    • 2014-12-12
    • 2012-08-12
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 2011-05-13
    相关资源
    最近更新 更多