2013-02-15 105 views
1

我有一个使用MultiValueConverter的textcolum datagrid。转换器有2个值。第一个依赖于当前Item和第二个TextBlock。显示的值是我想要的。使用MultiValueConverter排序DataGrid列

<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时,有什么方法可以对列进行排序?

+0

[DataGridColumn SortMemberPath on MultiBinding]可能重复(http://stackoverflow.com/questions/11193203/datagridcolumn-sortmemberpath-on-multibinding) – horns 2015-12-22 00:36:57

回答

2

我觉得这是同样的问题在这里:DataGridColumn SortMemberPath on MultiBinding

SortMemberPath期待一个属性的名称(如“TotalDollars”)不是一个个体计算行值。把它看作标题,你为整个列设置一次。你的转换器会返回一个15这样的数字,其中SortMemberPath想要一个绑定路径字符串。浮现在脑海

两个选项:

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

    public double AveragePrice 
    { 
        get { return TotalDollars/NumberToDivideBy; } 
    } 
    
  2. 指定想在这个questionOnSorting事件处理程序。

希望它有帮助。 :)