我有一个使用DataGrid的uwp应用程序。
DataGrid中的大多数列都是相当普通的文本列,可以正常工作。
在一个列中,我有一个按钮,可同时更改其文本和颜色以匹配单元格中的数据。为此,我使用了带有嵌入式Button的DataTemplate,并使用转换器将Button的各种属性绑定到数据。
当我运行该应用程序时,第一屏数据看起来正确,并且当我向下滚动数据时看起来也很好,但是当我向上滚动到顶部时,许多行的此按钮的状态都是错误的。 (但是,这些行的其他普通数据是正确的。)
我使用调试器进行了检查,以确保基础数据没有更改,也没有更改。
我还使用调试器来查看何时调用我的转换器,而调用它们的频率没有我期望的那么频繁。最初,每一行都有一个调用,但是当我向下滚动之后向上滚动时,我只会看到偶尔调用的函数(如果有的话)。
我不确定我做错了什么。据我所知,所有绑定都是正确的,并且一开始它们可以正常工作,但是当内容滚动时,它们并没有被用来更新屏幕。我还能尝试解决什么问题?
这是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>
坦率