DataGrid fire RowDetailsVisibilityChanged при закрытии RowDetails - PullRequest
0 голосов
/ 27 августа 2018

У меня есть 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, даже если оно сворачивается привязкой.

...