WPF: ошибка привязки при прокрутке сетки данных по вертикали

#c# #wpf #xaml #mvvm #datagrid

#c# #wpf #xaml #mvvm #сетка данных

Вопрос:

У меня ошибка привязки при прокрутке моей сетки данных по вертикали.

Моя сетка данных определяется следующим образом :

 <DataGrid Grid.Row="1" Grid.Column="0" IsReadOnly="True" Style="{StaticResource DataGridNormalStyle}" Margin="5,0,5,5" ItemsSource="{Binding FilteredList}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Nom" Binding="{Binding Value.Ouvrier.Nom}" Width="210">
            <DataGridTextColumn.CellStyle>
                <Style TargetType="DataGridCell" BasedOn="{StaticResource DataGridCellStyle}">
                    <Style.Triggers>
                        <MultiDataTrigger>
                            <MultiDataTrigger.Conditions>
                                <Condition Binding="{Binding DataContext.AppContext.User.IsConnectedAsDirection, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" Value="true"/>
                                <!--TODO : Need to fix error-->
                                <Condition Binding="{Binding Value.Ouvrier.APEAutre}" Value="APE"/>
                                <Condition Binding="{Binding Value.Ouvrier.Profession}" Value="Ouvrier"/>
                            </MultiDataTrigger.Conditions>
                            <Setter Property="Background" Value="#00FF00"/>
                        </MultiDataTrigger>
                    </Style.Triggers>
                </Style>
            </DataGridTextColumn.CellStyle>
        </DataGridTextColumn>
        <DataGridTextColumn Header="Prénom" Binding="{Binding Value.Ouvrier.Prenom}" Width="150"/>
        <DataGridTextColumn Header="Matricule" Binding="{Binding Value.Ouvrier.Matricule}" Width="125" ElementStyle="{StaticResource DataGridTextColumnElementCentered}"/>
        <DataGridTextColumn Header="N° SAP RH" Binding="{Binding Value.Ouvrier.SAPRH}" Width="100" ElementStyle="{StaticResource DataGridTextColumnElementCentered}" HeaderStyle="{StaticResource CenteredColumnHeaderStyle}"/>
    </DataGrid.Columns>
</DataGrid>
 

Проблемная строка — это одна :

 <Condition Binding="{Binding DataContext.AppContext.User.IsConnectedAsDirection, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" Value="true"/>
 

Я использую MVVM.

Все работает нормально, все мои привязки работают правильно. У меня нет ошибки при отображении представления. Но когда я начинаю прокручивать свою сетку данных по вертикали, у меня много сбоев привязки в окне «Сбои привязки XAML», прокручиваемые по очереди : введите описание изображения здесь

Кто-то сказал мне, что это может быть вызвано тем, что ячейка выходит за пределы отображаемой части и больше не имеет доступа к контексту. Но я действительно не знаю, как это решить.

У вас есть какие-нибудь идеи?

Спасибо

Комментарии:

1. вы можете игнорировать их. или попробуйте использовать BindingProxy в качестве обходного пути

2. RelativeSource не всегда работает надежно (сначала привязка завершится ошибкой и будет настроена позже) с примерами данных и виртуализацией пользовательского интерфейса. В таких случаях необходимо использовать более прямую привязку: ElementName или прокси (согласно комментарию @ASh). Другой подход заключается в отключении виртуализации, но это может снизить производительность даже больше, чем игнорирование ошибок.

3. Я не знаю, сколько у вас записей, но, возможно, отключение виртуализации DataGrid может помочь.