Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 在DataGrid列上应用ValueConverter_Wpf_Vb.net_Xaml_Ivalueconverter_Xceed Datagrid - Fatal编程技术网

Wpf 在DataGrid列上应用ValueConverter

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

我编写了一个converter类(实现了IValueConverter),它将来自数据库的代码(例如“CTY”)转换为更为用户友好的描述(例如“City”)。我想在XCeed WPF Datagridcontrol中的单个列上使用转换器,但我不知道必须将转换器设置为哪个属性。我还尝试使用样式将其附加到数据单元,但它无法正常工作,我认为也没有必要,因为转换器应该只应用于一列,而不是每个单元

这些列也是自动生成的,所以如果我能在运行时应用它,那就太棒了

我不知道我必须将转换器应用到列的哪个属性(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>
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属性完全相同。是的,名称是正确的,因为如果输入错误的名称,它会抛出错误,但现在它什么也不做。。。