DataGrid selecting an object

I am following the master/detail example and I am a bit confused about @bind-Value="@order". In the example, order is dynamic. Why is that? We know the type is Order.

Furthermore, if I try and just create Order selectedOrder and value bind that, it wont event compile:

Render Code:
__builder.AddAttribute(231, "ValueChanged", new System.Action<System.Object>(__value => basicSelectedWorker = __value));

Cannot implicitly convert type 'object' to 'Order'. An explicit conversion exists (are you missing a cast?)

I was able to get my code to work like so:

Order _order;
object order
        return _order;
        if (_order!= value)
            _order= (Order)value;

This is obviously pretty ugly, plus, I have to use _order in the detail view everywhere once I do this. Is there a better way? DataGrid knows the TItem, why is there so much boilerplate?

Check this thread for more info:

You can use object since the value can be single item or IEnumerable<TItem> . Unfortunately dynamic will not work for Blazor bindings.

So, it HAS to be object because it can either be an object, or a list. That makes sense.

Unfortunately dynamic will not work for Blazor bindings.

But in the example, you guys are clearly binding dynamic:

Why is that? Is there an easier way to cast? What if there was a TBindItem that way Blazor would know the type we want to bind and our @code{} would be way cleaner.