У меня проблемы с этим переплетом:
<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}}" />