2013-07-26 109 views
2

我在SL5中有一個數據網格,並且項目源是一個自定義類的列表。除一個以外的所有列都是常規DataGridTextColumns,除了綁定到作爲數據源的類的屬性外,沒有任何更新。但是,其中一列是包含CheckBox的DataGridTemplateColumn。當複選框被選中/取消選中時,我試圖修改項目源中特定的底層元素。如何訪問相關複選框所屬的特定元素?修改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事件觸發,發件人是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讓我接受你的答案,就是這樣。謝謝! –

相關問題