데이터 바인딩에서 모델을 사용하는 경우 예, 완전히 불변 인 경우에도 INotifyPropertyChanged
을 구현해야합니다. 그 이유는 성능과는 아무런 관련이 없지만 메모리 누수를 피하기 위해서입니다.
Binding
은 항상 변경 알림을 등록하려고합니다, 당신은 INotifyPropertyChanged
을 구현하거나 형태 [Property]Changed
의 개별 변경 이벤트를 노출하지 않으면, 그것은 PropertyDescriptor
API를 통해 등록합니다. 기본 반사 기반 PropertyDescriptor
구현은 글로벌 구독 테이블을 사용하며 어떤 이유에서 Binding
이 완전히 구독을 취소하지 않으면보기 모델이 무기한 유지됩니다. 이는 바인딩이 INotifyPropertyChanged
알림을 구독 할 때 사용되는 약한 이벤트 패턴과는 대조적입니다. 런타임시 바인딩은 일반적으로 자체적으로 정리되지만 Xaml 디자이너는 이러한 상황에서 유출 된 것으로 유명하여 작업 할 때 디자이너 프로세스의 메모리 사용량이 꾸준히 증가합니다.
INPC가 없을 때 바인딩이 변경 사항에 구독하는 경우 바인딩이 업데이트되지 않는 이유는 무엇입니까? (나는 단지 호기심입니다) – McGarnagle
속성 설명자를 사용할 때 값이 동일한 속성 설명자를 통해 설정 될 때 변경 사항에 대해서만 알림을받습니다. 동일한 CLR 속성 (변경 알림 없음)에 두 개의 텍스트 상자를 바인딩하면이를 실제로 볼 수 있습니다. 하나의 값을 변경하면 모든 바인딩이 동일한 설명자를 거치기 때문에 다른 값이 업데이트됩니다. 그래도 속성을 직접 변경하려는 경우에는 그리 좋은 방법이 아닙니다. –