При связывании с DataGridColumn с IMultiValueConverter возникают проблемы, в то время как при использовании подобного IValueConverter нет

У меня есть 2 столбца флажка Datagrid каждый с привязкой.

    <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>

Привязки просто пишут дату / время, когда флажок был установлен в поле БД "Required" и ноль, когда не проверено.

В первом флажке все отлично работает со следующим конвертером:

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;
    }
}
}

В последнем столбце я хотел сохранить дату и время в 2 разных поля "Required_Date" а также "Required_Time" (String), Следующие IMultiConverter был создан, чтобы справиться с этим:

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
    };
}
}

При начальной загрузке колонка выглядит хорошо. В столбце проверены все соответствующие ячейки. Однако, когда значение проверено / снято, я получаю следующую ошибку привязки.

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')

Кроме того, когда я снимаю флажок с ячейки, она не снимается должным образом, и через некоторые точки останова в моем конвертере я замечаю, что значения поступают как DependencyProperty.Unset (Вероятно, из-за обязательного предупреждения).

(9-30-12)

Я нашел более многообещающее лидерство в комментарии к коду:

"Причина, по которой MultiBindings не работают, заключается в том, что DataGridHelper.UpdateSource использует GetBindingExpression, а не GetBindingExpressionBase. Если это изменить, мульти-и приоритетные привязки должны работать".

Я попытался установить обновление на Explicit и создать DataGrid_EndCellEdit событие, которое вызывает BindingBaseExpression обновить, но я думаю, что DataGridColumn игнорирует параметр обновления.

(10-12-12)

Все еще не повезло, я пытался работать с BindingBaseExpression но безрезультатно. Очевидно, что IMultiValueCOnverter связывание делает что-то странное.

0 ответов

Другие вопросы по тегам