【发布时间】:2012-01-20 09:02:50
【问题描述】:
我编写了一个转换器类(实现 IValueConverter),它将来自数据库的代码(例如“CTY”)转换为更用户友好的描述(例如“City”)。我想在 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 字段,因为如果我输入一个不存在的字段,它会引发错误。现在它什么也不做
【问题讨论】:
-
你能显示一些创建数据网格和分配数据的代码吗?
-
我添加了一些代码。我似乎无法找到将数据分配给网格的位置,因为它位于框架中的某个位置并且我没有实现该部分,希望您能理解;)
-
我首先想到的是,如果可能的话,您可以停止自动生成列并将它们自己添加到视图中。通过这种方式,您可以仅将转换器添加到您需要的列中。
-
是的,但是网格非常通用,所以那里可能有点问题...但是如果我要使用 XAML 中的列来管理它,我将如何将转换器应用于列?我在互联网上搜索,在普通的数据网格上,有一个绑定属性,我可以在其中绑定它,但 Xceed 列没有该属性。我还在问题中编辑了我的代码(我首先忘记了 datagrid xaml)
标签: wpf vb.net xaml ivalueconverter xceed-datagrid