2013-02-15 104 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事件處理程序。

希望它有幫助。 :)