thể trùng lặp:
typesafe NotifyPropertyChanged using linq expressionsthực hiện NotifyPropertyChanged không dây ma thuật
Tôi đang làm việc trên một ứng dụng nhóm lớn mà đang phải chịu đựng việc sử dụng nặng của dây ma thuật theo hình thức NotifyPropertyChanged("PropertyName")
, - việc thực hiện tiêu chuẩn khi tư vấn cho Microsoft. Chúng tôi cũng đang phải chịu một số lượng lớn các thuộc tính bị đặt tên (làm việc với một mô hình đối tượng cho một mô-đun tính toán có hàng trăm thuộc tính được lưu trữ) - tất cả đều được ràng buộc với giao diện người dùng.
Nhóm của tôi gặp nhiều lỗi liên quan đến thay đổi tên thuộc tính dẫn đến chuỗi ma thuật không chính xác và ràng buộc phá vỡ. Tôi muốn giải quyết vấn đề bằng cách thực hiện các thông báo thay đổi thuộc tính mà không sử dụng các chuỗi ma thuật. Các giải pháp duy nhất tôi đã tìm thấy cho .Net 3.5 liên quan đến các biểu thức lambda. (Ví dụ: Implementing INotifyPropertyChanged - does a better way exist?)
quản lý của tôi là vô cùng lo lắng về chi phí thực hiện chuyển đổi từ
set { ... OnPropertyChanged("PropertyName"); }
để
set { ... OnPropertyChanged(() => PropertyName); }
nơi tên này được chiết xuất từ
protected virtual void OnPropertyChanged<T>(Expression<Func<T>> selectorExpression)
{
MemberExpression body = selectorExpression.Body as MemberExpression;
if (body == null) throw new ArgumentException("The body must be a member expression");
OnPropertyChanged(body.Member.Name);
}
Xem xét một ứng dụng như bảng tính khi thông số thay đổi, khoảng một trăm giá trị được tính toán lại và cập nhật trên giao diện người dùng trong thời gian thực. Việc thực hiện thay đổi này có tốn kém đến nỗi nó sẽ tác động đến sự đáp ứng của UI? Tôi thậm chí không thể biện minh cho thử nghiệm thay đổi này ngay bây giờ bởi vì nó sẽ mất khoảng 2 ngày giá trị của việc cập nhật tài sản setters trong các dự án và các lớp học.
Tôi sử dụng phản ánh cho điều này. Xem bài đăng trên blog của tôi ở đây về điều này. [http://tsells.wordpress.com/2011/02/08/using-reflection-with-wpf-and-the-inotifypropertychanged-interface/](http://tsells.wordpress.com/2011/02/08/using-reflection-with-wpf-and-the-inotifypropertychanged-interface /) Hãy chú ý đến lưu ý hiệu suất ở cuối bài đăng. – tsells
Bài viết hay, nhưng bạn đã đưa ra sự khác biệt tuyệt đối về thời gian biểu diễn, nhưng điều đó không hữu ích. Tôi muốn được nhiều hơn nữa quan tâm đến sự khác biệt tỷ lệ phần trăm trong thời gian thực hiện. Có sự khác biệt lớn giữa việc chuyển từ 200 mili giây sang 300 mili giây, và từ 0,01 mili giây đến 100,01 mili giây. Cùng một sự khác biệt tuyệt đối, khác biệt tỷ lệ phần trăm khác nhau. – Alain
Ông cho biết sự khác biệt là khoảng 1/4 giây cho 10.000 thông báo thay đổi tài sản. Tôi không nghĩ rằng đó là một sự khác biệt đủ lớn để quan tâm, và nếu bạn thực sự đang cập nhật hơn 10k tài sản cùng một lúc tôi nghiêm túc xem xét lại thiết kế :) – Rachel