在DataGrid中使用DataTemplate时绑定失败

时间:2019-10-02 23:17:02

标签: uwp datagrid

我有一个使用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>

坦率

0 个答案:

没有答案