Cập nhật: Đã giải quyết được vấn đề, xem my Answer.Đăng ký INotifyPropertyChanged cho các đối tượng lồng nhau (con)
Tôi đang tìm kiếm một sạch và giải pháp thanh lịch để xử lý các sự kiện INotifyPropertyChanged
của lồng đối tượng (trẻ em). Mã ví dụ:
public class Person : INotifyPropertyChanged {
private string _firstName;
private int _age;
private Person _bestFriend;
public string FirstName {
get { return _firstName; }
set {
// Short implementation for simplicity reasons
_firstName = value;
RaisePropertyChanged("FirstName");
}
}
public int Age {
get { return _age; }
set {
// Short implementation for simplicity reasons
_age = value;
RaisePropertyChanged("Age");
}
}
public Person BestFriend {
get { return _bestFriend; }
set {
// - Unsubscribe from _bestFriend's INotifyPropertyChanged Event
// if not null
_bestFriend = value;
RaisePropertyChanged("BestFriend");
// - Subscribe to _bestFriend's INotifyPropertyChanged Event if not null
// - When _bestFriend's INotifyPropertyChanged Event is fired, i'd like
// to have the RaisePropertyChanged("BestFriend") method invoked
// - Also, I guess some kind of *weak* event handler is required
// if a Person instance i beeing destroyed
}
}
// **INotifyPropertyChanged implementation**
// Implementation of RaisePropertyChanged method
}
Tập trung vào số BestFriend
Thuộc tính và giá trị của nó là setter. Bây giờ Tôi biết rằng tôi có thể thực hiện việc này theo cách thủ công, thực hiện tất cả các bước được mô tả trong các nhận xét. Nhưng điều này sẽ là rất nhiều mã, đặc biệt là khi tôi đang có kế hoạch để có nhiều tài sản con thực hiện INotifyPropertyChanged
như thế này. Tất nhiên họ sẽ không phải luôn luôn cùng loại, điều duy nhất họ có điểm chung là giao diện INotifyPropertyChanged
.
Lý do là, trong kịch bản thực tế của tôi, tôi có một đối tượng "Item" (trong giỏ hàng) phức tạp có các thuộc tính lồng nhau trên nhiều lớp (Item có đối tượng "License"). một lần nữa) và tôi cần được thông báo về bất kỳ thay đổi nào của "Mục" để có thể tính toán lại giá.
Bạn có một số mẹo hay hoặc thậm chí một số việc thực hiện để giúp tôi giải quyết điều này?
Thật không may, tôi không thể/được phép sử dụng các bước xây dựng sau như PostSharp để hoàn thành mục tiêu của mình.
Cảm ơn bạn rất nhiều trước,
- Thomas
AFAIK, hầu hết các triển khai ràng buộc không * mong đợi * sự kiện tuyên truyền trong thời trang đó. Bạn * không * thay đổi giá trị của 'BestFriend', sau khi tất cả. –