Привязка к HasValue для типа Nullable с помощью Silverlight DataGrid - PullRequest
1 голос
/ 04 мая 2011

У меня проблемы с этим переплетом:

<sdk:DataGridCheckBoxColumn Header="Invoiced" Binding="{Binding SalesInvoiceId.HasValue}" />

Ошибка: Ошибка System.Windows.Data: ошибка пути BindingExpression: свойство 'HasValue' не найдено в '6' 'System.Int32' (HashCode = 6). BindingExpression: Path = 'SalesInvoiceId.HasValue' DataItem = 'Entities.DeliveryNote' (HashCode = 5034835); Целевым элементом является 'System.Windows.Controls.CheckBox' (Name = ''); Свойство target - IsChecked (тип System.Nullable`1 [System.Boolean] ') ..

Поле SalesInvoiceId находится в контексте данных для строки, все остальные столбцы связываются нормально.

Тип SalesInvoiceId: int?. И при взгляде на объект во время отладки он отображается как int?, поэтому DataGrid не должен иметь проблем с этим - все же он ссылается на него, как будто это просто int!

Есть что-то, что я делаю не так?

Большое спасибо.

Ответ

Сначала я попытался с помощью IValueConverter найти свойство HasValue с помощью отражения и вызвать его, к сожалению, передаваемый параметр value по-прежнему просто старый int.

Теперь у меня есть следующее:

public class HasValueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value != null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

И XAML:

<sdk:DataGridCheckBoxColumn Header="Invoiced" Binding="{Binding SalesInvoiceId, Converter={StaticResource HasValueConverter}}" />

1 Ответ

0 голосов
/ 04 мая 2011

Я не уверен, что если у вас может быть это выражение HasValue в привязке с Silverlight, вам, возможно, придется использовать конвертер или предоставить свойство, выполняющее эту оценку для вас и возвращающее bool.

...