DataGrid-如何从列中访问Row.IsSelected(在xaml中)

时间:2016-12-14 09:00:42

标签: wpf xaml data-binding wpfdatagrid

我有一个包含几列和行的DataGrid。

对于选定的行 - 我希望为每列显示组合框(绑定到字符串列表)。

对于未选择的行,我想显示带有所选字符串的TextBlock。

我的目标是使用DataGridColumnTemplate中的绑定(也许是像How to display combo box as textbox in WPF via a style template trigger?这样的样式)。我怎么去" Row.IsSelected"从Column的CellTemplate中?我想我需要把视觉树上到Row?

1 个答案:

答案 0 :(得分:3)

  

我想我需要把视觉树上到Row?

是的,您可以使用RelativeSource绑定到CellTemplate中父DataGridRow的任何属性:

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