/ / DataGrid - Zugriff auf Row.IsSelected aus einer Spalte (in xaml) - wpf, xaml, data-binding, wpfdatagrid

DataGrid- Zugriff auf Row.IsSelected aus einer Spalte (in XAML) - WPF, XAML, Datenbindung, WPFDATAGRID

Ich habe ein DataGrid mit ein paar Spalten und Zeilen.

Für eine ausgewählte Zeile möchte ich ein Kombinationsfeld (gebunden an eine Liste von Zeichenfolgen) für jede Spalte anzeigen.

Für eine Zeile, die nicht ausgewählt ist, möchte ich einen TextBlock mit der ausgewählten Zeichenfolge anzeigen.

Ich versuche es mit einer Bindung innerhalb der DataGridColumnTemplate (und vielleicht einem Stil wie hier) Wie zeige ich ein Kombinationsfeld als Textfeld in WPF über einen Stilvorlagentrigger an?). Wie würde ich vorgehen, um "Row.IsSelected" aus dem CellTemplate der Spalte heraus aufzurufen?

Antworten:

3 für die Antwort № 1

Ich nehme an, ich muss den visuellen Baum zur Reihe hinaufgehen.

Ja, Sie können eine RelativeSource verwenden, um eine Bindung an eine beliebige Eigenschaft der übergeordneten DataGridRow in Ihrer CellTemplate herzustellen:

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

Also sollte so etwas funktionieren:

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