У меня есть приложение uwp, которое использует DataGrid.
Большинство столбцов в моей DataGrid - это довольно обычные текстовые столбцы, которые работают нормально.
В одном столбце у меня есть кнопкаэто изменяет и его текст и его цвет, чтобы соответствовать данным в ячейке. Для этого я использовал DataTemplate со встроенной кнопкой, и различные свойства кнопки привязываются к данным с помощью конвертеров.
Когда я запускаю приложение, первый экран данных выглядит правильно, и, как яПрокрутка вниз, данные также выглядят нормально, но когда я прокручиваю обратно вверх, состояние этой кнопки неправильное для многих строк. (Но другие, обычные данные для этих строк верны).
Я проверил с помощью отладчика, чтобы убедиться, что базовые данные не изменились и не изменились.
Я такжеиспользовал отладчик, чтобы увидеть, когда вызывались мои конвертеры, и они вызывались не так часто, как я ожидал. Первоначально для каждой строки выполняется один вызов, но когда я прокручиваю вверх после прокрутки вниз, я вижу только те функции, которые вызываются время от времени, если вообще.
Я не уверен, что сделал неправильно. Насколько я могу судить, все мои привязки верны и изначально работают нормально, они просто не используются для обновления экрана при прокрутке контента. Что еще я могу попытаться исправить это?
Вот XML:
<controls:DataGridTemplateColumn x:Name="markCompleteCol" Header="Complete" Tag="Complete">
<controls:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button x:Name="markCompleteColButton" Background="Transparent" Visibility="{Binding Path=IsCompleted,
Converter={StaticResource inverseBoolToVisConverter}, ConverterParameter=false}" HorizontalAlignment="Center" HorizontalContentAlignment="Center" Click="MarkCompleteColButton_ClickAsync">
<Button.Content>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<Border CornerRadius="14"
Background="{Binding Path=IsCompleted, Mode=OneWay,
Converter={StaticResource markCompleteButtonBackgroundColorFormatter}}"
BorderBrush="{Binding Path=IsCompleted, Mode=OneWay, Converter={StaticResource markCompleteButtonOutlineColorFormatter}}"
BorderThickness="0">
<TextBlock Text="{Binding Path=IsCompleted, Mode=OneWay, Converter={StaticResource markCompleteButtonFormatter}}"
Margin="16, 5, 16, 5"
TextAlignment="Center"
Foreground="{Binding Path=IsCompleted, Mode=OneWay, Converter={StaticResource markCompleteButtonOutlineColorFormatter}}"/>
</Border>
</StackPanel>
</Button.Content>
</Button>
</DataTemplate>
</controls:DataGridTemplateColumn.CellTemplate>
</controls:DataGridTemplateColumn>
Фрэнк