2015-01-17 42 views
1

我的WPF应用程序中有一个DataGrid,其中包含保存布尔值的列。我想镜像DataGridCheckBoxColumn,但我想将复选框更改为彩色文本框。因此,对于一个真正的价值,它会显示一个绿色的“通行证”和虚假的红色“失败”。我已经尝试设置DataGridCheckBoxColumn.ElementStyle和一个DataGridTemplateColumn里面有一个按钮,但绑定不会更新。它们在加载时设置正确,但在项目更新时不会设置。数据网格包含TestPointAttempts的集合。在WPF DataGrid中绑定到按钮不会更新

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

<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”值,但Text和Foreground按钮不会更新。在我的viewmodel我有代码来更新项目。我将所选单元格作为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; } 
    ... 
} 

我如何获得的细胞上的变化更新?

+1

当你调用'ToggleTestResult'? 以及为什么你不通知“TalkIn'和'TalkOut'属性内的房产 – safi

+0

是的,这是做到了。谢谢! – WiteCastle

回答

0

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

另一种选择是使用Fody