Reputation: 45096
Have a DataGrid with multiple columns.
Would like to limit activation of the DataGrid.RowDetailsTemplate to certain columns.
Actually I just want to exclude one column from activating the DataGrid.RowDetailsTemplate.
Upvotes: 1
Views: 619
Reputation: 19296
You can use RowDetailsVisibilityChanged
event (msdn) and in event handler you can check selected column and hide or show row details.
In example below I don't want to show row details when I select cell in column "Name".
XAML:
<DataGrid Name="outerGrid" AutoGenerateColumns="False"
ItemsSource="{Binding}"
RowDetailsVisibilityChanged="outerGrid_RowDetailsVisibilityChanged" >
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid Name="innerGrid" ItemsSource="{Binding Items}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding Id}"/>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Surname" Binding="{Binding Surname}"/>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding Id}"/>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Surname" Binding="{Binding Surname}"/>
</DataGrid.Columns>
</DataGrid>
Code-behind:
private void outerGrid_RowDetailsVisibilityChanged(object sender, DataGridRowDetailsEventArgs e)
{
DataGrid dg = sender as DataGrid;
if (dg != null)
{
if (dg.CurrentCell != null && dg.CurrentCell.Column.Header.ToString() == "Name")
{
e.DetailsElement.Visibility = System.Windows.Visibility.Collapsed;
}
else
{
e.DetailsElement.Visibility = System.Windows.Visibility.Visible;
}
}
}
Upvotes: 1