Yes, it's related to the DataRow and the DataTable to which you are binding. DataTable does two unusual things with the bound property:
- It treats it as a read-write list
- It expects a specific data type
I say these are unusual, because most other controls don't do this. A ListBox, for example, expects a read-only list, and will bind the items template to whatever type you give it.
Update Controls is not designed to work with read-write lists. This was a compromise to make linq work in the view model the way it does. If a collection property had a setter, you would have to figure out what was different between the provided list and
your linq-transformed list. I couldn't figure out a way to make this accessible.
And secondly, the specific DataRow data type is a killer. Update Controls puts a wrapper in between the view and the view model so it can inject dependency tracking code. When a control looks for a specific data type, rather than just a set of properties,
it cannot tolerate that wrapper.
Having said all that, I realized something. There is an easier workaround than the three I mentioned above. If you manage an ObservableCollection in your view model yourself, then Update Controls will not wrap that property. It will still give you dependency
tracking on all of the other properties. I'd recommend you try this solution.