在xceed网格列组值模板中获取数据行上下文或值父项?

问题描述 投票:1回答:1

我正在使用xceed DataGrid,但我不相信这里很重要。我需要的是如何正确地进行数据绑定。我有一个DataGrid专栏如下:

<xcdg:Column FieldName="TestFieldValue"             
             Visible="False" Title="TestTitle"
             GroupValueTemplate="{StaticResource TestFieldGroupTemplate}"/>

我使用的DataTemplate如下:

<DataTemplate DataType="{x:Type testNamespace:TestFieldRecord}" 
              x:Key="TestFieldGroupTemplate">
    <TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type xcdg:DataRow}}, 
                              Path=DataContext, 
                              Converter={StaticResource TestFieldValueConverter}}" />
</DataTemplate>

首先,与此列字段关联的属性值只是一个很长的值。 DataTemplate上的DataType实际上是列字段属性的父类。奇怪的是,如果我只是像Text={Binding Converter={StaticResource TestFieldValueConverter}}那样绑定数据模板中的text属性,转换器仍然会受到命中,但是列中的长值。

我需要的是要么绑定到DataRow的上下文,要么绑定到TestFieldValuetestNamespace:TestFieldRecord的父节点。任何找到祖先的尝试都会让我不再碰到我的转换器。

xaml data-binding datagrid datatemplate xceed
1个回答
0
投票

我认为您需要使用Snoop工具查看树和DataContext以查看发生了什么。

在树中升级几个级别,DataContext将是一个Xceed组。该组有一组项目。您的TestFieldGroupTemplate正在应用于组。

所以主要的问题是团体冠军来自哪里?

如果您只想更改组文本,可以使用DataTemplate定位组。 (在付费版本的TableflowView中,这将取代所有标准的东西)。

例如,这会将Group和DataGridControl传递给IMultiValueConverter转换器:

<DataTemplate DataType="{x:Type xcdg:Group}">
    <TextBlock>
        <TextBlock.Text>
            <MultiBinding Converter="{StaticResource AnExampleConverter}">
                <Binding Path="DataContext" RelativeSource="{RelativeSource TemplatedParent}"/>
                <Binding RelativeSource="{RelativeSource AncestorType={x:Type xcdg:DataGridControl}}"/>
            </MultiBinding>
        </TextBlock.Text>
    </TextBlock>
</DataTemplate>
© www.soinside.com 2019 - 2024. All rights reserved.