2013-07-26 2 views
2

У меня есть datagrid в SL5, а источник источника - это список пользовательского класса. Все столбцы, за исключением одного, являются регулярными DataGridTextColumns, не имеющими ничего другого, кроме привязки к свойству класса, являющегося источником данных. Однако один из столбцов представляет собой DataGridTemplateColumn, который содержит CheckBox. Когда флажок установлен/не установлен, я пытаюсь изменить конкретный базовый элемент в источнике элемента. Как мне получить доступ к определенному элементу, частью которого является флажок?Изменение родительского datarow в Silverlight DataGrid

Я моя сетка определяется следующим образом:

 <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 Event, отправитель - это сам CheckBox, и я не знаю, как перейти к фактическому элементу данных, к которому привязан флажок:

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

ответ

3

Вы должны иметь возможность использовать checkBox.DataContext, чтобы получить объект, к которому он привязан.

+0

Bam! Работает! Как только stackoverflow позволяет мне принять ваш ответ, вот и все. Благодаря! –

Смежные вопросы