#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
может помочь.