Tôi biết rằng khi bạn đăng ký một đối tượng cho các sự kiện đính kèm của chuột, bạn sẽ bị rò rỉ bộ nhớ. Đó là lý do tại sao bạn cần sử dụng WeakEvent pattern.Cách thức điều khiển WPF tích hợp quản lý trình xử lý sự kiện của họ cho một sự kiện được đính kèm?
Tôi gặp vấn đề với mẫu này: Nếu bạn muốn sử dụng nó, bạn không thể xác định trình xử lý của mình trong mã XAML.
Đối với tôi, nó có nghĩa là tất cả các mã như thế này rò rỉ:
<SomeControl Mouse.MouseDown="MyHandler" />
Trừ khi bạn loại bỏ xử lý của bạn một cách rõ ràng trong mã (Và tôi nghi ngờ rằng ai làm thế). Bây giờ có điều gì đó tôi không hiểu:
<Button Click="MyHandler" />
Mã này bằng cách nào đó sử dụng một nơi nào đó sự kiện Mouse.MouseDown để phát hiện nhấp chuột vào nút. Với một số nghiên cứu với phản xạ, tôi thấy rằng sự kiện này sử dụng MouseDown của lớp UIElement. Và khi tôi đọc mã của UIElement tôi không hiểu: không có WeakEventManager!
Ai đó có thể giải thích cho tôi cách UIElement nhận sự kiện từ Mouse.MouseDown mà không bị rò rỉ?
Tôi đồng ý với bạn, tuy nhiên trình xử lý trong XAML cho sự kiện đính kèm (Tôi không nói về các sự kiện kiểm soát 'nhưng sự kiện là Mouse.MouseDown) có thể bị rò rỉ, vì luôn có tham chiếu về nó. Nội bộ, Lớp nút sử dụng các sự kiện Mouse.MouseDown (UIElement là cụ thể) .Và tôi không biết tại sao điều này không bị rò rỉ. –
Điểm tốt. Các sự kiện được đính kèm là các tham chiếu bên ngoài. –