/ / DataGrid- Як отримати доступ до Row.IsSelected з колонці (у xaml) - wpf, xaml, зв'язування даних, wpfdatagrid

DataGrid-Як отримати доступ до Row.IsSelected з колонці (у xaml) - wpf, xaml, data-binding, wpfdatagrid

Я отримав DataGrid з кількома стовпцями та рядками.

Для вибраного рядка - я хотів би показати комбобок (пов'язаний зі списком рядків) для кожного стовпця.

Для рядка, який не обраний, я хочу показати TextBlock з вибраною ланцюжком.

Я намагаюсь це зробити, використовуючи зв'язування в DataGridColumnTemplate (і, можливо, стиль, як тут Як відобразити спадне поле в якості текстового поля в WPF через тригер шаблону стилю?) Як я маю намір перейти до "Row.IsSelected" з колонці "CellTemplate"? Я вважаю, що я повинен робити підніматися візуальне дерево в рядок?

Відповіді:

3 для відповіді № 1

Я вважаю, що мені потрібно зробити візуальне дерево на рядок?

Так, ви можете використовувати RelativeSource для прив'язки до будь-якого властивості батьківської DataGridRow у вашому CellTemplate:

<TextBlock Text="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType=DataGridRow}}" />

Тому щось подібне має працювати:

<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<ComboBox x:Name="cmb">
<ComboBoxItem>1</ComboBoxItem>
<ComboBoxItem>2</ComboBoxItem>
<ComboBoxItem>3</ComboBoxItem>
</ComboBox>
<TextBlock x:Name="txt" Text="..." Visibility="Collapsed" />
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType=DataGridRow}}" Value="True">
<Setter TargetName="cmb" Property="Visibility" Value="Collapsed" />
<Setter TargetName="txt" Property="Visibility" Value="Visible" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>