i using class trulyobservablecollection listed below. i'm adding event listener propertychanged event , works fine initially. serialize , deserialize collection , add event listener then, events no longer come through can seen unit test below. can explain why?
this class:
[serializable] public class trulyobservablecollection<t> : observablecollection<t> t : inotifypropertychanged { [field:nonserialized] public event propertychangedeventhandler propertychanged; public trulyobservablecollection() { init(); } private void init() { collectionchanged += trulyobservablecollection_collectionchanged; } void trulyobservablecollection_collectionchanged(object sender, notifycollectionchangedeventargs e) { if (e.newitems != null) foreach (object item in e.newitems) (item inotifypropertychanged).propertychanged += item_propertychanged; if (e.olditems != null) foreach (object item in e.olditems) (item inotifypropertychanged).propertychanged -= item_propertychanged; } void item_propertychanged(object sender, propertychangedeventargs e) { if (this.propertychanged != null) propertychanged(this, new propertychangedeventargs(e.propertyname)); } }
here unit test. sieeserializer.clone() binarize serialize , deserialize.
[testclass] public class unittest1 { [testmethod] public void testmethod1() { trulyobservablecollection<somedata> tt = new trulyobservablecollection<somedata>(); tt.add(new somedata()); tt = sieeserializer.clone(tt) trulyobservablecollection<somedata>; tt.propertychanged += (s, e) => { string ttt = ""; // never here.. }; tt[0].master = true; } } [serializable] public class somedata : inotifypropertychanged { private bool master; public bool master { { return master; } set { master = value; sendpropertychanged(); } } [field: nonserialized] public event propertychangedeventhandler propertychanged; protected virtual void sendpropertychanged([callermembername]string propertyname = null) { if (this.propertychanged != null) propertychanged(this, new propertychangedeventargs(propertyname)); } }
Comments
Post a Comment