Tôi đã tự mình thực hiện theo các hướng dẫn trong phần "Ghi chú cho người thừa kế" của tài liệu WeakEventManager. Đây là triển khai cơ bản của WeakEventManager
. Lớp tìm nguồn cung ứng sự kiện có tên là PropertyValue
và sự kiện được đặt tên theo số Changed
.
public class PropertyValueChangedEventManager : WeakEventManager
{
public static PropertyValueChangedEventManager CurrentManager
{
get
{
var manager_type = typeof(PropertyValueChangedEventManager);
var manager = WeakEventManager.GetCurrentManager(manager_type) as PropertyValueChangedEventManager;
if (manager == null)
{
manager = new PropertyValueChangedEventManager();
WeakEventManager.SetCurrentManager(manager_type, manager);
}
return manager;
}
}
public static void AddListener(PropertyValue source, IWeakEventListener listener)
{
CurrentManager.ProtectedAddListener(source, listener);
}
public static void RemoveListener(PropertyValue source, IWeakEventListener listener)
{
CurrentManager.ProtectedRemoveListener(source, listener);
}
protected override void StartListening(object source)
{
((PropertyValue)source).Changed += DeliverEvent;
}
protected override void StopListening(object source)
{
((PropertyValue)source).Changed -= DeliverEvent;
}
}
Nguồn
2010-08-19 20:06:14
Microsoft cung cấp PropertyChangedEventManager (http://msdn.microsoft.com/en-us/library/system.componentmodel.propertychangedeventmanager.aspx) và CollectionChangedEventManager (http://msdn.microsoft.com/en-us/ library/system.collections.specialized.collectionchangedeventmanager.aspx) được tích hợp vào .NET. –
Cảm ơn ví dụ của bạn. Mặc dù triển khai ngắn hơn sẽ là nguồn '((PropertyValue)) .Changed + = DeliverEvent;' –
@ alpha-mouse: Chính xác "yếu" trong "triển khai ngắn hơn" của bạn ở đâu? Tôi không thể tìm thấy nó. –