c# .net wpf datagrid imultivalueconverter

c# - La vinculación a DataGridColumn con IMultiValueConverter encuentra problemas al usar un IValueConverter similar no



.net wpf (0)

Tengo 2 columnas de casilla de verificación Datagrid, cada una con un enlace.

<DataGrid ItemsSource="{Binding}" Name="DataGrid1" DataContext="{Binding Source={StaticResource TableViewSource}}"> <DataGridCheckBoxColumn Header="Required" Width="50" MinWidth="50"> <DataGridCheckBoxColumn.Binding> <Binding Path="Required" Converter="{StaticResource DateTimeToBooleanConverter}"/> </DataGridCheckBoxColumn.Binding> </DataGridCheckBoxColumn> <DataGridCheckBoxColumn Header="Required Test" Width="60" MinWidth="60"> <DataGridCheckBoxColumn.Binding> <MultiBinding Converter="{StaticResource DateTimeToBooleanMultiverter}"> <Binding Path="Required_Date" /> <Binding Path="Required_Time" /> </MultiBinding> </DataGridCheckBoxColumn.Binding> </DataGridCheckBoxColumn> </DataGrid>

Los enlaces simplemente escriben la fecha / hora en que el recuadro fue marcado en el campo db "Required" y nulo cuando está desmarcado.

En la primera casilla, todo funciona bien con el siguiente convertidor:

public class DateTimeToBooleanConverter : IValueConverter { public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value != null) { return true; } else { return false; } } public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value == true) { return System.DateTime.Now.Date; } else { return null; } } }

En la última columna, quería guardar la fecha y la hora en 2 campos diferentes "Required_Date" y "Required_Time" (String) . El siguiente IMultiConverter fue creado para manejarlo:

public class DateTimeToBooleanMultiverter : IMultiValueConverter { public object Convert(object[] values, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (values[0] != null) { return true; } else { return false; } } public object[] ConvertBack(object value, System.Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) { if (value != null) { if (value == true) { return { System.DateTime.Now.Date, System.DateTime.Now.TimeOfDay.ToString() }; } } return { null, null }; } }

En la carga inicial, la columna se ve bien. La columna tiene todas las celdas apropiadas marcadas. Sin embargo, cuando el valor se marca / desmarca, obtengo el siguiente error de enlace.

System.Windows.Data Error: 5 : Value produced by BindingExpression is not valid for target property.; Value=''True'' MultiBindingExpression:target element is ''DataGridCell'' (Name=''''); target property is ''CellContent'' (type ''String'')

Además, cuando desactivo una celda, no se desmarca correctamente y noto a través de algunos puntos de interrupción en mi convertidor que los valores están entrando como DependencyProperty.Unset (Probablemente debido a la advertencia de enlace).

(9-30-12)

Encontré una ventaja más prometedora en un comentario codeplex:

"El motivo por el que MultiBindings no funciona es que DataGridHelper.UpdateSource usa GetBindingExpression y no GetBindingExpressionBase. Si se cambia, los enlaces multi y prioritarios deberían funcionar".

BindingBaseExpression configurar la actualización en Explicit y crear un evento DataGrid_EndCellEdit que llama a BindingBaseExpression para actualizar, pero creo que DataGridColumn está ignorando la opción de actualización.

(10-12-12)

Todavía no tuve suerte, intenté trabajar con BindingBaseExpression en vano. Obviamente, el enlace IMultiValueCOnverter está haciendo algo extraño.