У меня есть 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;
}
Bam! Работает! Как только stackoverflow позволяет мне принять ваш ответ, вот и все. Благодаря! –