Получение datarow контекста или значения parent в шаблоне значений группы столбцов сетки xceed? - PullRequest
1 голос
/ 29 марта 2019

Я использую 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>

Во-первых, значение свойства, связанного с этим полем столбца, просто длинное. DataType здесь DataTemplate на самом деле является родительским классом свойства поля столбца. Странно то, что если я просто свяжу свойство text в шаблоне данных, например Text={Binding Converter={StaticResource TestFieldValueConverter}}, конвертер все равно попадет, но с длинным значением из столбца.

Здесь мне нужно привязать либо контекст DataRow, либо родительский элемент столбца TestFieldValue, то есть testNamespace:TestFieldRecord. Любые попытки найти предка приводили меня к тому, что я больше не обращался к конвертеру.

1 Ответ

0 голосов
/ 11 апреля 2019

Я думаю, вам нужно использовать инструмент 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>
...