我正在使用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
的上下文,要么绑定到TestFieldValue
列testNamespace:TestFieldRecord
的父节点。任何找到祖先的尝试都会让我不再碰到我的转换器。
我认为您需要使用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>