> I too think that there should be a mechanism by which > the CurrencyManager could be prodded to refresh the > data in the controls. Perhaps in v.next...
What's particularly frustrating is that the CurrencyManager does indeed have such a feature (it has a Refresh method), but for some reason this is not present in the PropertyManager. I don't understand why this wasn't made a method of BindingManagerBase since it would be useful in both binding scenarios. -- Ian Griffiths DevelopMentor ----- Original Message ----- From: "Sean Greer (SBI-Chico)" <[EMAIL PROTECTED]> > From my testing it appears that the property change notification should be a > public event of type EventHandler that follows the naming convention > <property name>Changed. If you define and fire this event when the property > changes, all bound controls will be updated. > > I too think that there should be a mechanism by which the CurrencyManager > could be prodded to refresh the data in the controls. Perhaps in v.next... > > -----Original Message----- > From: Ian Griffiths [mailto:[EMAIL PROTECTED]] > > I am binding a property of a very straightforward class the Text property of > a control: > > public class MySimpleSource > { > private int myAge; > public int Age { get { return myAge; } set { myAge = value; } } > } > > If I bind multiple controls (e.g. a load of TextBoxes) to this property on a > single instance of this type everything works just great - if I modify the > age in one control the update is successfully propagated to all of the other > controls. But what I want to know is the 'correct' way of modifying the > value in code and having this same update propagation work. The following > is obviously insufficient: > > mySource.Age += 1; > > because there is no mechanism by which the data binding architecture can > know that I've changed this property. This seems to work: > > mySource.Age += 1; > BindingContext[mySource].CancelCurrentEdit(); > > but I feel kind of unclean after doing that... I think I'm just exploiting > a side effect here - cancelling an edit will cause all bound control > properties to be forced back to the current value of the data source. This > doesn't feel like a good way of doing it. > > The following also works: > > TypeDescriptor.GetProperties(myDataSource)["Age"].SetValue( > myDataSource, myDataSource.Age + 1); > > but that feels unnecessarily verbose. And although it seems like less of a > hack from the point of view of making sure the updates happen, the late > binding style is also something I'm not wholly comfortable with. > > What I really want is something like this: > > mySource.Age += 1; > BindingContext[mySource].PropertyChanged("Age"); > or even > BindingContext[mySource].Refresh(); > > but I don't see any way of doing that. What's the official solution here? > (Is it: "Don't do that. Use IBindingList if you want change notifications." > If so, does this mean I can't do change notifications for non-list-like data > sources? Or should I implement a list with just the one item?..) > > The documentation for BindableAttribute indicates that bindable properties > should raise a "property change notification", but it's not entirely clear > how you are supposed to do that. (Or at least it's not clear how to do it > if your data source isn't list-like.) You can read messages from the DOTNET archive, unsubscribe from DOTNET, or subscribe to other DevelopMentor lists at http://discuss.develop.com.
