У меня есть DataGrid с RowDetailsVisibilityMode
, привязанным к свойству IsChecked
ToggleButton, которое переключается между режимом редактирования и режимом сохранения, и я обрабатываю событие щелчка, чтобы сохранить данные.когда ToggleButton проверяется, RowDetailsVisibilityMode="VisibleWhenSelected"
и не отмечается, он сворачивается, и я обрабатываю событие RowDetailsVisibilityChanged
, чтобы вызвать метод, и это должно быть перед сохранением данных.но моя проблема в том, что когда ToggleButton меняет состояние с истинного на ложное, RowDetailsVisibilityMode="Collapsed"
и, следовательно, Row.DetailsVisibility
сворачивается и не запускает событие RowDetailsVisibilityChanged
.и я не могу свернуть его вручную, потому что, как только я нажимаю кнопку сохранения, свойство галочка уже ложно, а свойство DetailsVisibility свернуто.
кнопка редактирования / сохранения
<ToggleButton x:Name="editBtn" Grid.Column="1" Margin="2.5" Click="editBtn_Click">
<ToggleButton.Style>
<Style TargetType="ToggleButton">
<Setter Property="Content" Value=" _Edit "/>
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Content" Value=" Save "/>
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
datagrid
<DataGrid x:Name="paymentPlans" VerticalAlignment="Top" Margin="2.5" ItemsSource="{Binding PaymentPlans, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Row="1" Grid.Column="0" CanUserAddRows="False" HeadersVisibility="Column" AutoGenerateColumns="False" CanUserDeleteRows="False" IsReadOnly="True" PreviewMouseWheel="dg_PreviewMouseWheel" RowDetailsVisibilityChanged="paymentPlans_RowDetailsVisibilityChanged">
<DataGrid.Style>
<Style TargetType="DataGrid">
<Setter Property="RowDetailsVisibilityMode" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, ElementName=editBtn}" Value="True">
<Setter Property="RowDetailsVisibilityMode" Value="VisibleWhenSelected"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Style>
<DataGrid.Columns>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
c #
private void editBtn_Click(object sender, RoutedEventArgs e)
{
if (editBtn.IsChecked ?? false)
{
}
else
{
foreach (var item in paymentPlans.Items)
{
//this does not help because IsChecked is already false and the details collapsed
paymentPlans.SetDetailsVisibilityForItem(item, Visibility.Collapsed);
}
context.SaveChanges();
}
}
private void paymentPlans_RowDetailsVisibilityChanged(object sender, DataGridRowDetailsEventArgs e)
{
if (e.Row.DetailsVisibility == Visibility.Collapsed)
{
((PaymentPlan)e.DetailsElement.DataContext).CreatePayments();
}
}
как мне обработать событие щелчка ToggleButton до того, как свойство IsChecked станет ложным, или вызвать событие RowDetailsVisibilityChanged
, даже если оно сворачивается привязкой.