In TreeView the selected and checked items have to be provided as IEnumerable<object>. This can make things a bit of a pain if you have for example outside events that are also trying to change the list of checked items. Not insurmountable or hard but just a pain.
For example to remove an item since IEnumerable is immutable you to have to completely re-assign the collection. SelectedItems = SelectedItems.Where[Some condition] . Instead of SelectedItems.Remove, add etc.
I realize the reasons you are binding to IEnumerable<object> and not using generics
I propose adding "CheckedField" and "SelectedField" in your observable treeview binding and then we would not have to pass in Checked / Selected Items at all and just bind those fields to the Data we are passing in. Make life a lot easier.
The same thing likely applies to some other controls that have the same problem. So keep it consistent.