INotifyPropertyChanging و التصديقات:عندما أقوم برفع PropertyChanging?

StackOverflow https://stackoverflow.com/questions/169829

سؤال

INotifyPropertyChanged إلى حد ما النفس التفسيرية و أنا واضح على رفع هذا واحد (أيعندما أنتهي من تحديث القيم).
إذا كنت تنفيذ INotifyPropertyChanging أنا تميل إلى رفع الحدث في أقرب وقت كما كنت أدخل اضع أو أي طريقة أخرى أن التغييرات الكائنات الدولة ثم تواصل مع أي حراس التصديقات التي قد تحدث.

لذلك أنا علاج الحدث إخطارا من أن المنشأة قد تتغير ولكن لم يتم تغييرها, وقد لا ينتهي فعلا في تغيير بنجاح.

إذا المستهلكين من وجوه تستخدم هذه الخاصية (مثل دعنا نقول LINQ to SQL باستخدام هذا الحدث من أجل التغيير تتبع) يجب أن يكون عقد قبالة فقط رفع الحدث مرة واحدة يجب التحقق من أن القيم لقد أعطيت جيدة الدولة من وجوه صحيحة عن التغيير ؟

ما هو عقد هذا الحدث و ما الآثار الجانبية التي ستكون في عدد المشتركين ؟

هل كانت مفيدة؟

المحلول

إذا كان الكائن هو بالنظر إلى قيمة غير صالحة الخاصية و يمكنك رمي استثناء ثم يجب أن لا رفع PropertyChanging هذا الحدث.يجب عليك فقط رفع الحدث عندما كنت قد قررت أن قيمة سوف تغيير.الاستخدام النموذجي السيناريو هو تغيير بسيط الميدانية:

public T Foo
 { get
    { return m_Foo;
    }
   set
    { if (m_Foo == value) return; //no need for change (or notification)
      OnPropertyChanging("Foo");
      m_Foo = value;
      OnPropertyChanged("Foo");
    }
 }

نصائح أخرى

وبوصفها جانبا - PostSharp لديه القدرة مثيرة للاهتمام لصناعة السيارات في تنفيذ INotifyPropertyChanged - <وأ href = " http://code.google.com/p/postsharp-user-samples/wiki/DataBindingSupport "يختلط =" نوفولو noreferrer "> مثل ذلك .

إذا كنت ترغب في تجنب تنفيذ INotifyPropertyChanged تماما، والنظر في استخدام تحديث ضوابط. NET بدلا من ذلك. هذا يلغي كل ما يقرب من قانون المحاسبة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top