2

我在 SL5 中有一个数据网格,项目源是一个自定义类的列表。除一个之外的所有列都是常规的 DataGridTextColumns,除了绑定到作为数据源的类的属性之外,没有什么比这更有趣的了。但是,其中一列是包含 CheckBox 的 DataGridTemplateColumn。当复选框被选中/取消选中时,我正在尝试修改项目源中的特定底层元素。如何访问相关复选框所属的特定元素?

我的网格定义如下:

      <data:DataGrid x:Name="ExceptionGrid" AutoGenerateColumns="False" CanUserSortColumns="True" Grid.Row="1" Grid.Column="0" VirtualizingStackPanel.VirtualizationMode="Recycling">
        <data:DataGrid.Columns>
            <data:DataGridTextColumn Header="Policy" Binding="{Binding PolicyName}" />
            <data:DataGridTextColumn Header="Retention" Binding="{Binding Retention,Converter={StaticResource BackupRetentionConverter}}" />
            <data:DataGridTemplateColumn Header="Approved?">
                <data:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox IsChecked="{Binding .,Converter={StaticResource ApprovalConverter}}" HorizontalAlignment="Center" VerticalAlignment="Center" Checked="ToggleButton_OnChecked" Unchecked="ToggleButton_OnUnchecked" />
                    </DataTemplate>
                </data:DataGridTemplateColumn.CellTemplate>
            </data:DataGridTemplateColumn>
            <data:DataGridTextColumn Header="Exception" Binding="{Binding ExceptionMessage}" />

        </data:DataGrid.Columns>

为了在初始绑定时选中/取消选中复选框,我制作了一个转换器来执行此操作:

  public class ApprovalConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var detail = (BackupExceptionDetail) value;
        if (detail.IsApproved) return true;
        return false;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return null;
    }
}

问题是,当我的 Checked 事件触发时,发送者是 CheckBox 本身,我不知道如何获取复选框绑定到的实际数据项:

      private void ToggleButton_OnChecked(object sender, RoutedEventArgs e)
    {
        var detail = (BackupExceptionDetail)sender; // <--- dies here, as the sender is a checkbox
        detail.IsApproved = true;
    }
4

1 回答 1

3

您应该能够使用checkBox.DataContext它来获取它所绑定的对象。

于 2013-07-26T19:56:38.810 回答