This article may be helpful
The properties aren't bindable because they have the Browsable(false) attribute on them. This is intentional, because otherwise they'd always appear when you use drag-and-drop binding, or bind a collection to a grid.
In other words, you'd have to remove 5-6 properties from every UI scenario if they were bindable.
So I've traded on set of pain for another, because it does make it harder to bind IsSavable to a button control, and other similar scenarios. But I think that is less painful than having to muck around with every UI and every grid to get rid of all the properties on every object that you rarely want to show.
bcrowell:That makes sense. So would you recommend implementing a shadow property idea on each bizobject for those base properties or is there a good way to override the Browsable(false) setting in code.
I use the method that Rocky describes here to enable and disable those buttons. I initially did exactly what you're doing with shadow properties so I could bind to them but I ran into performance issues. It's long ago now and my memory is getting dim but I think now it may have been related to databinding behaving badly when I was bubbling up ListChanged events from child collections. That's been a recent topic here relating to CSLA 3.5.
Everything went smoothly once I stopped trying to bind to those properties and simply updated the button properties on the bindingSource CurrentItemChanged event. To reduce code, I have a standard helper method that takes a form and a BO and updates the buttons based on standard button names. I also have a flag to disable the updating when I'm binding and unbinding since I noticed that the CurrentItemChanged event happens many times so you really only need to update the buttons once when the operation is done.
Copyright (c) Marimer LLC