/ / DataGrid- Como acessar Row.IsSelected de dentro de uma coluna (em xaml) - wpf, xaml, data-binding, wpfdatagrid

DataGrid - Como acessar Row.IsSelected de dentro de uma coluna (em xaml) - wpf, xaml, ligação de dados, wpfdatagrid

Eu tenho um DataGrid com algumas colunas e linhas.

Para uma linha selecionada, gostaria de exibir uma caixa de combinação (vinculada a uma lista de cadeias) para cada coluna.

Para uma linha que não está selecionada, eu gostaria de exibir um TextBlock com a string selecionada.

Meu objetivo é fazer isso usando uma ligação dentro do DataGridColumnTemplate (e talvez um estilo como o aqui Como exibir a caixa de combinação como caixa de texto no WPF por meio de um gatilho de modelo de estilo?) Como eu iria para "Row.IsSelected" de dentro do CellTemplate da coluna? Suponho que preciso subir a árvore visual para a linha?

Respostas:

3 para resposta № 1

Suponho que preciso subir a árvore visual para a linha?

Sim, você pode usar um RelativeSource para vincular a qualquer propriedade do pai DataGridRow no seu CellTemplate:

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

Então, algo assim deveria funcionar:

<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>