Wpf 在DataGrid列上应用ValueConverter
我编写了一个converter类(实现了IValueConverter),它将来自数据库的代码(例如“CTY”)转换为更为用户友好的描述(例如“City”)。我想在XCeed WPF Datagridcontrol中的单个列上使用转换器,但我不知道必须将转换器设置为哪个属性。我还尝试使用样式将其附加到数据单元,但它无法正常工作,我认为也没有必要,因为转换器应该只应用于一列,而不是每个单元 这些列也是自动生成的,所以如果我能在运行时应用它,那就太棒了 我不知道我必须将转换器应用到列的哪个属性(Xceed列没有“Binding”属性。你们有什么建议吗 如果需要,可以提供更多的示例或代码。我希望我的问题对您来说有点清楚 编辑: 以下是我在XAML文件中使用的内容:Wpf 在DataGrid列上应用ValueConverter,wpf,vb.net,xaml,ivalueconverter,xceed-datagrid,Wpf,Vb.net,Xaml,Ivalueconverter,Xceed Datagrid,我编写了一个converter类(实现了IValueConverter),它将来自数据库的代码(例如“CTY”)转换为更为用户友好的描述(例如“City”)。我想在XCeed WPF Datagridcontrol中的单个列上使用转换器,但我不知道必须将转换器设置为哪个属性。我还尝试使用样式将其附加到数据单元,但它无法正常工作,我认为也没有必要,因为转换器应该只应用于一列,而不是每个单元 这些列也是自动生成的,所以如果我能在运行时应用它,那就太棒了 我不知道我必须将转换器应用到列的哪个属性(Xc
<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>
EDIT2:
我尝试使用DataGridItemProperty(请参见下面的XAML),但在调试时,我没有进入Converter类,网格只是加载初始数据,而不是转换后的数据
<xcdg:DataGridCollectionViewSource.ItemProperties>
<xcdg:DataGridItemProperty Name="BudgettaireEntiteit" Converter="{StaticResource BudgettaireEntiteitConverter}" />
</xcdg:DataGridCollectionViewSource.ItemProperties>
它肯定知道BudgetTaireEntite字段,因为如果我输入一个不存在的字段,它会抛出一个错误。现在它什么也不做。您可以将DataGridCollectionViewSource与一起使用。此对象具有一个属性,可用于将您创建的转换器分配给所需的列 比如:
<xcdg:DataGridItemProperty Name="RequiredColumn"
Converter="{StaticResource BudgettaireEntiteitConverter}"/>
更详细的示例参见。您可以将DataGridCollectionViewSource与一起使用。此对象具有一个属性,可用于将您创建的转换器分配给所需的列 比如:
<xcdg:DataGridItemProperty Name="RequiredColumn"
Converter="{StaticResource BudgettaireEntiteitConverter}"/>
更详细的示例见。完整的示例代码如下。此XAML将日期转换器应用于Xceed网格中的两个日期列(DateDue和DatePaid):
<Window.Resources>
<local:DateConverter x:Key="conDate" />
<xcdg:DataGridCollectionViewSource
AutoCreateItemProperties="False"
Filter="Filter_By_Member"
x:Key="cvsDonations">
<xcdg:DataGridCollectionViewSource.ItemProperties>
<xcdg:DataGridItemProperty
Name="DateDue"
Converter="{StaticResource conDate}">
</xcdg:DataGridItemProperty>
<xcdg:DataGridItemProperty
Name="DatePaid"
Converter="{StaticResource conDate}">
</xcdg:DataGridItemProperty>
</xcdg:DataGridCollectionViewSource.ItemProperties>
(</xcdg:DataGridCollectionViewSource>
.....
</Window.Resources>
(
.....
下面是完整的示例代码。此XAML将日期转换器应用于Xceed网格中的两个日期列(DateDue和DatePaid):
<Window.Resources>
<local:DateConverter x:Key="conDate" />
<xcdg:DataGridCollectionViewSource
AutoCreateItemProperties="False"
Filter="Filter_By_Member"
x:Key="cvsDonations">
<xcdg:DataGridCollectionViewSource.ItemProperties>
<xcdg:DataGridItemProperty
Name="DateDue"
Converter="{StaticResource conDate}">
</xcdg:DataGridItemProperty>
<xcdg:DataGridItemProperty
Name="DatePaid"
Converter="{StaticResource conDate}">
</xcdg:DataGridItemProperty>
</xcdg:DataGridCollectionViewSource.ItemProperties>
(</xcdg:DataGridCollectionViewSource>
.....
</Window.Resources>
(
.....
您能展示一下创建datagrid和分配数据的代码吗?我添加了一些代码。我似乎找不到将数据分配给网格的位置,因为它在框架中的某个地方,我没有实现该部分,希望您能理解;)我想到的第一件事是,如果可能的话,你可以停止自动生成列,自己将它们添加到视图中。这样你就可以只将转换器添加到需要的列中。是的,但是网格非常通用,因此可能会有一点小问题……但是如果我用XAML中的列来管理它,你会怎么做呢我将转换器应用于该列?我在internet上搜索,在正常的datagrid上有一个绑定属性,我可以将其绑定到该属性,但Xceed列没有该属性。我还编辑了问题中的代码(我首先忘记了datagrid xaml)你能展示一些创建datagrid和分配数据的代码吗?我添加了一些代码。我似乎找不到将数据分配给网格的位置,因为它在框架中的某个地方,我没有实现该部分,希望你理解;)我想到的第一件事是,如果可能的话,你可以停止自动生成列,自己将它们添加到视图中。这样你就可以只将转换器添加到需要的列中。是的,但是网格非常通用,因此可能会有一点小问题……但是如果我用XAML中的列来管理它,你会怎么做呢我将转换器应用于该列?我在internet上搜索,在正常的datagrid上有一个绑定属性,我可以将其绑定到该属性,但Xceed列没有该属性。我还编辑了问题中的代码(我首先忘记了datagrid xaml)非常感谢,这正是我想要的,但我仍然有一个小问题(见更新的答案:)您应该检查DataGrid的ItemsSource是否绑定到DataGridCollectionViewSource,DataGridItemProperty的Name属性是否与绑定到该列的object属性完全相同。是的,名称是正确的,因为如果输入错误的名称,它会抛出错误,但现在它什么也不做……非常感谢,这正是我想要的,但我仍然有一个小问题(见更新的答案:))您应该检查DataGrid的ItemsSource是否绑定到DataGridCollectionViewSource,DataGridItemProperty的Name属性是否与绑定到该列的object属性完全相同。是的,名称是正确的,因为如果输入错误的名称,它会抛出错误,但现在它什么也不做。。。