Сбой привязки при использовании DataTemplate в DataGrid - PullRequest
0 голосов
/ 03 октября 2019

У меня есть приложение 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>

Фрэнк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...