1
votes

I am having trouble with this binding:

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

The error is: System.Windows.Data Error: BindingExpression path error: 'HasValue' property not found on '6' 'System.Int32' (HashCode=6). BindingExpression: Path='SalesInvoiceId.HasValue' DataItem='Entities.DeliveryNote' (HashCode=5034835); target element is 'System.Windows.Controls.CheckBox' (Name=''); target property is 'IsChecked' (type 'System.Nullable`1[System.Boolean]')..

The field SalesInvoiceId is on the data context for the row, all other columns bind fine.

The type of SalesInvoiceId is int?. And when looking at the object whilst debugging, it is shown as a int? so the DataGrid should not have a problem with this - yet it is refering to it as if it is just an int!

Is there anything I am doing wrong?

Many Thanks.

Answer

At first I tried an IValueConverter to look for the HasValue property using reflection and invoke it, unfortunatly the value parameter passed is STILL a plain old int.

I now have the following:

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

And XAML:

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

1 Answers

0
votes

I'm not sure if you can have that HasValue expression in the binding with Silverlight, you might have to use a converter or expose a property doing this evaluation for you and returning a bool.