Я написал класс преобразователя (реализующий IValueConverter), который преобразует код, поступающий из базы данных (например, «CTY»), в более удобное для пользователя описание (например, «Город»). Я хочу использовать преобразователь для одного столбца в моем XCeed WPF Datagridcontrol, но я не знаю, какое свойство я должен установить для преобразователя. Я также пытался привязать его к DataCell с помощью стиля, но он не будет работать должным образом, и я думаю, что это также не нужно, поскольку конвертер должен применяться только к одному столбцу, а не к каждой ячейке.
Столбцы также генерируются автоматически, поэтому, если бы я мог применить их во время выполнения, это было бы здорово!
Я не знаю, к какому свойству столбца я должен применить преобразователь (столбец 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, потому что, если я ввожу поле, которого не существует, он выдает ошибку. Теперь он просто ничего не делает