2012-01-20 22 views
1

我已經編寫了一個轉換器類(實現IValueConverter),它將來自數據庫的代碼(例如「CTY」)轉換爲更易於用戶使用的描述(例如「City」)。我想在我的XCeed WPF Datagridcontrol中的單個列上使用轉換器,但我不知道必須將Converter設置爲哪個屬性。我也嘗試使用樣式將其附加到DataCell,但它不能正常工作,我認爲這也不是必需的,因爲轉換器只適用於一列而不是每個單元格。在DataGrid上應用ValueConverter列

這些列也是自動生成的,所以如果我可以在運行時應用它,那將非常棒!

我不知道該列的屬性,我必須轉換到aplly(在Xceed列好好嘗試一下有一個「綁定」屬性。難道你們有什麼建議?

更多的實例或代碼。可如果要求提供我希望我的問題是你有點清晰

編輯:

這是我在XAML文件中使用的東西:

 <utils:BudgettaireEntiteitConverter x:Key="BudgettaireEntiteitConverter" /> 

    <xcdg:DataGridCollectionViewSource x:Key="GridViewSourceDefault" 
               Source="{Binding Converter={StaticResource BudgettaireEntiteitConverter}}"> 
       <xcdg:DataGridCollectionViewSource.DetailDescriptions> 
         <lc:ActieOverzichtBudgettenDescription 
                 RelationName="Budgetten" 
                 AutoCreateDetailDescriptions="False" 
                 AutoCreateForeignKeyDescriptions="False" 
                 AutoCreateItemProperties="True" 
                 Title="Budgetten" > 
          <lc:ActieOverzichtBudgettenDescription.StatFunctions> 
           <xcdg:SumFunction ResultPropertyName="SumOfBedragInBudget" 
               SourcePropertyName="BedragInBudget" /> 

           <xcdg:SumFunction ResultPropertyName="SumOfBedragInAfwachting" 
               SourcePropertyName="BedragInAfwachting" /> 
          </lc:ActieOverzichtBudgettenDescription.StatFunctions> 

         <lc:ActieOverzichtBudgettenDescription.DetailDescriptions> 
           <lc:ActieBudgetRegistratieSleutelsDescription RelationName="RegistratieSleutels" 
                       AutoCreateDetailDescriptions="False" 
                       AutoCreateForeignKeyDescriptions="False" 
                       AutoCreateItemProperties="True" 
                       Title="Registratiesleutels" /> 
       </lc:ActieOverzichtBudgettenDescription.DetailDescriptions> 

     </lc:ActieOverzichtBudgettenDescription> 

    </xcdg:DataGridCollectionViewSource.DetailDescriptions> 

</xcdg:DataGridCollectionViewSource> 

<xcdg:DataGridControl x:Name="lsvActies" 
           TargetUpdated="OnListTargetUpdated" 
           ItemsSourceName="Acties" 
           IsRefreshCommandEnabled="False" 
           rf:XceedGridService.LoadUserSettings="True" 
           rf:XceedGridService.SettingsKeyName="ActieOverzichtGridKey" 
           rf:XceedGridService.ItemContextMenu="{StaticResource ActieContextMenu}"> 

       <xcdg:DataGridControl.CommandBindings> 
       <CommandBinding Command="Delete" Executed="ExecuteDeleteItem" CanExecute="CanExecuteDeleteItem"/> 
      </xcdg:DataGridControl.CommandBindings> 

     </xcdg:DataGridControl> 

這是我的轉換器:

Public Class BudgettaireEntiteitConverter 
     Implements IValueConverter 

     Private hs As Hashtable = FillHashTable() 


     Public Function Convert(value As Object, targetType As System.Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert 

      If hs.ContainsKey(value) 
       Return hs(value).ToString() 
      Else 
       Return Nothing 
      End If 

     End Function 

     Public Function ConvertBack(value As Object, targetType As System.Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack 
      Throw New NotSupportedException("ConvertBack not supported!") 
     End Function 

     Function FillHashTable() As Hashtable 
      Dim hashtable As New Hashtable 
      Dim dataCache = New ReferentieDataCache 

      Dim budgettaireEntiteiten = dataCache.GetBudgettaireEntiteiten() 

      For Each budgettaireEntiteitRow As BudgettaireEntiteitRow In budgettaireEntiteiten 
       hashtable.Add(budgettaireEntiteitRow.BudgettaireEntiteit, budgettaireEntiteitRow.DisplayOmschrijving) 
      Next 

      Return hashtable 
     End Function 

    End Class 

EDIT2:

我與DataGridItemProperty嘗試(見下文XAML),但是當我調試我不Converter類進入與電網只加載與初始數據,而不是轉換後的數據。

<xcdg:DataGridCollectionViewSource.ItemProperties> 
     <xcdg:DataGridItemProperty Name="BudgettaireEntiteit" Converter="{StaticResource BudgettaireEntiteitConverter}" /> 
</xcdg:DataGridCollectionViewSource.ItemProperties> 

它肯定知道BudgettaireEntiteit場,因爲如果我輸入一個不存在,它拋出一個錯誤的字段。現在它什麼都不做

+0

可以顯示創建數據網格和分配數據的代碼位數。 –

+0

我加了一些我的代碼。我似乎無法找到數據分配給網格的位置,因爲它位於框架中的某個位置,我沒有實現該部分,希望您能理解;) –

+0

我想到的第一件事是,如果可能的話,您可以停止自動生成列並將它們自己添加到視圖中。這樣,您可以只將轉換器添加到需要的列中。 –

回答

4

您可以使用DataGridCollectionViewSource與DataGridItemProperty。該對象有一個Converter屬性,可用於將您創建的轉換器分配到所需的列。

是這樣的:

<xcdg:DataGridItemProperty Name="RequiredColumn" 
     Converter="{StaticResource BudgettaireEntiteitConverter}"/> 

exceed documentation更詳細的例子。

+0

非常感謝,這是我一直在尋找的,但我仍然有一個小問題(請參閱更新回答:)) –

+0

您應該檢查DataGrid的ItemsSource綁定到DataGridCollectionViewSource,並且DataGridItemProperty的Name屬性與綁定到該列的對象屬性完全相同。 –

+0

是的,這個名字是正確的,因爲如果我輸入了錯誤的名字,它會拋出一個錯誤,但現在它什麼都不做。 –

相關問題