Я написал класс конвертера (реализующий IValueConverter), который преобразует код из базы данных (например, «CTY») в более удобное для пользователя описание (например, «Город»). Я хочу использовать конвертер для одного столбца в моем XCeed WPF Datagridcontrol, но я не знаю, на какое свойство я должен установить конвертер. Я также попытался прикрепить его к DataCell, используя стиль, но он не будет работать должным образом, и я думаю, что это также не требуется, поскольку конвертер должен применяться только к одному столбцу, а не к каждой ячейке.
Столбцы также генерируются автоматически, поэтому, если бы я мог применить их во время выполнения, это было бы здорово!
Я не знаю, к какому свойству столбца я должен применить конвертер (столбец Xceed не имеет свойства "Binding". У вас есть какие-нибудь предложения?
По запросу могут быть предоставлены другие примеры или код. Я надеюсь, что моя проблема немного понятна для вас.
РЕДАКТИРОВАТЬ:
Вот что я использую в своем файле 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, потому что, если я введу несуществующее поле, оно выдаст ошибку. Теперь он просто ничего не делает