绑定到 WPF DataGrid 中的按钮不会更新

Binding to Button in WPF DataGrid does not update

我的 WPF 应用程序中有一个 DataGrid,其中包含包含布尔值的列。我想镜像 DataGridCheckBoxColumn 但我想将复选框更改为彩色文本框。因此,对于真值,它将显示绿色 "Pass",对于假值,它将显示红色 "Fail"。我试过设置 DataGridCheckBoxColumn.ElementStyle 和一个带有按钮的 DataGridTemplateColumn,但绑定不会更新。它们在加载时设置良好,但在项目更新时设置不正确。数据网格包含 TestPointAttempts 的集合。

这是我的模板列代码,里面有一个按钮。

<DataGridTemplateColumn Header="Talk Out"  >
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Button Content="{Binding TalkOut, Converter={StaticResource BoolToPassFailConverter}, Mode=TwoWay}" 
                                    Foreground="{Binding TalkOut, Converter={StaticResource BoolToGreenRedConverter}, Mode=TwoWay}" 
                                    Style="{StaticResource TestResultButtonStyle}" 
                                    Click="TalkOutButton_Click"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

我能够使点击事件正常工作并更新代码中的 "TalkOut" 值,但按钮文本和前景不更新。在我的视图模型中,我有更新项目的代码。我将选定的单元格作为 TestPointAttempt 并将其传递给视图模型进行更新。这是我的视图模型代码:

public void ToggleTestResult(TestPointAttempt tpa, bool inOutSwitch)
    {
        if (inOutSwitch)
        {
            tpa.TalkIn = !tpa.TalkIn;
            RaisePropertyChanged(() => tpa.TalkIn);
        }
        else
        {
            tpa.TalkOut = !tpa.TalkOut;
            RaisePropertyChanged(() => tpa.TalkOut);
        }
    }

这是我的 testPointAttempt 模型:

 public class TestPointAttempt
{
    public string Id { get; set; }

    public int TestAttemptNumber { get; set; }

    public bool? TalkIn { get; set; }
    public bool? TalkOut { get; set; }
    ...
}

如何让单元格根据更改进行更新?

TestPointAttempt 需要实现 INotifyPropertyChanged,setter 需要触发 propertyChanged 事件。

另一种方法是使用 Fody