2014-11-21 4 views
0

꽤 많은 읽기 전용 컬렉션이고 사용자가 행을 선택하는 그리드에 표시되는 모델이있는 경우.모델에 INotifyPropertyChanged 인터페이스를 항상 구현해야합니까?

모델에 INotifyPropertyChanged를 항상 구현해야합니까? vs가 아닌 성능을 구현할 수 있습니까?

나는 성능이 UI가

VAR 같은 것을 사용하려고에 의해 영향을 알고 싶습니다

X = 모델에서 INotifyPropertyChanged와 같은;

그렇지 않으면 사용하지 않을 것입니다.

답변

3

데이터 바인딩에서 모델을 사용하는 경우 예, 완전히 불변 인 경우에도 INotifyPropertyChanged을 구현해야합니다. 그 이유는 성능과는 아무런 관련이 없지만 메모리 누수를 피하기 위해서입니다.

Binding은 항상 변경 알림을 등록하려고합니다, 당신은 INotifyPropertyChanged을 구현하거나 형태 [Property]Changed의 개별 변경 이벤트를 노출하지 않으면, 그것은 PropertyDescriptor API를 통해 등록합니다. 기본 반사 기반 PropertyDescriptor 구현은 글로벌 구독 테이블을 사용하며 어떤 이유에서 Binding이 완전히 구독을 취소하지 않으면보기 모델이 무기한 유지됩니다. 이는 바인딩이 INotifyPropertyChanged 알림을 구독 할 때 사용되는 약한 이벤트 패턴과는 대조적입니다. 런타임시 바인딩은 일반적으로 자체적으로 정리되지만 Xaml 디자이너는 이러한 상황에서 유출 된 것으로 유명하여 작업 할 때 디자이너 프로세스의 메모리 사용량이 꾸준히 증가합니다.

+0

INPC가 없을 때 바인딩이 변경 사항에 구독하는 경우 바인딩이 업데이트되지 않는 이유는 무엇입니까? (나는 단지 호기심입니다) – McGarnagle

+1

속성 설명자를 사용할 때 값이 동일한 속성 설명자를 통해 설정 될 때 변경 사항에 대해서만 알림을받습니다. 동일한 CLR 속성 (변경 알림 없음)에 두 개의 텍스트 상자를 바인딩하면이를 실제로 볼 수 있습니다. 하나의 값을 변경하면 모든 바인딩이 동일한 설명자를 거치기 때문에 다른 값이 업데이트됩니다. 그래도 속성을 직접 변경하려는 경우에는 그리 좋은 방법이 아닙니다. –

0

당신은 단지 DataGrid에에서 표시하고 다음 INPC를 구현할 필요가 없습니다 Model의 값을 변경할 수 있습니다 UI 상호 작용을 기대하지 않는 경우.

WPF 백킹 Model에서 UI를 업데이트 INPC기구에 연결된다. 한 번로드하고 다시 변경하지 않으면 필요하지 않습니다. 그러나 INPC c 꽤 편리해야하고 다른 행에 무언가를 업데이트해야하는 비즈니스 로직이라면 구현해야합니다. 기본적으로 다른 모델의 PropertyChangedEvent을 구독하여 속성이 변경되면 다른 행을 처리 할 수 ​​있습니다. 제기된다.

구현시 성능상의 이점은 없습니다.

+0

따라서 성능상의 이득이나 손실이 없습니까? – Debdeep