繁体   English   中英

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

[英]Binding to Button in WPF DataGrid does not update

我的WPF应用程序中有一个DataGrid,其中的列包含布尔值。 我想镜像DataGridCheckBoxColumn,但是我想将复选框更改为彩色文本框。 因此,对于真值,它将显示绿色的“通过”,而对于假值,将显示红色的“失败”。 我试过设置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>

我能够使click事件正常运行并更新代码中的“ TalkOut”值,但“文本”和“前景”按钮不会更新。 在我的视图模型中,我有代码来更新项目。 我将选定的单元格捕获为TestPointAttempt,并将其传递给viewmodel进行更新。 这是我的视图模型代码:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM