在DataGrid列上应用ValueConverter

Jel*_*ghs 1 vb.net wpf xaml ivalueconverter xceed-datagrid

我已经编写了一个转换器类(实现IValueConverter),该类将数据库(例如“ CTY”)中的代码转换为更加用户友好的描述(例如“ City”)。我想在XCeed WPF Datagridcontrol中的单个列上使用转换器,但是我不知道必须将Converter设置为哪个属性。我也尝试使用一种样式将其附加到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>
Run Code Online (Sandbox Code Playgroud)

这是我的转换器:

 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
Run Code Online (Sandbox Code Playgroud)

编辑2:

我尝试使用DataGridItemProperty(请参见下面的XAML),但是在调试时,我没有输入Converter类,并且网格仅加载初始数据,而不加载转换后的数据。

 <xcdg:DataGridCollectionViewSource.ItemProperties>
        <xcdg:DataGridItemProperty Name="BudgettaireEntiteit" Converter="{StaticResource BudgettaireEntiteitConverter}" />
 </xcdg:DataGridCollectionViewSource.ItemProperties>
Run Code Online (Sandbox Code Playgroud)

它绝对知道BudgettaireEntiteit字段,因为如果我输入一个不存在的字段,则会引发错误。现在它什么也没做

Adr*_*ciu 5

您可以将DataGridCollectionViewSource与DataGridItemProperty结合使用。该对象具有Converter属性,该属性可用于将您创建的转换器分配给必填列。

就像是:

 <xcdg:DataGridItemProperty Name="RequiredColumn"
       Converter="{StaticResource BudgettaireEntiteitConverter}"/>
Run Code Online (Sandbox Code Playgroud)

超越文档中有更详细的示例。