2012-07-02 1 views
2

DynamicObject에서 파생 된 WPF 프로젝트 용 BaseViewModel을 만드는 중입니다. 엔티티의 속성 변경을 처리하는 방법을 잘 모르겠습니다. (viewmodel의 주 엔터티의 탐색 속성)과 관련이 있습니다. 예를 들어MVVM DynamicObject + Entity Framework STE 엔터티 + 속성 변경 동작

:

VM은 :

public class CustomerCRUDViewModel: BaseEntityViewModel<Customer> 
    { 
     ... 
    } 

이것은 예를 들어, 고객 CRUD의 VM을 것입니다. 예를 들어 Customer 엔티티는 Address (Address 유형의 엔티티)라는 탐색 속성을 가지고 있습니다.

이제보기가 Address 내의 속성에보기를 바인딩 할 때 변경 사항이 VM에보고되지 않고 엔티티에 직접보고되므로 VM 수준에 정의 된 동작이 트리거되지 않습니다.

나는 설명이 충분하지 않을 수도 있다는 것을 알고, 나는 단지 내 가난한 영어로 자신을 더 잘 설명하는 법을 모른다.

내 질문은 : 일반적인 DynamicObject 기반 VM이 기본 엔터티의 일부가 아닌 속성에 대한 동작을 정의해야하는 시나리오를 어떻게 처리합니까?

답변

1

I 마지막으로 System.Dynamic.DynamicObject.TryGetMember 'getter'메서드에서 BaseViewModels의 캐시 된 인스턴스를 사용하여 탐색 속성을 래핑하여 해결했습니다. 가장 성능이 좋은 솔루션인지 확신 할 수 없지만 파생 된 엔티티 뷰 모델에 항상 내 탐색보기 모델을 강력하게 입력 할 수 있습니다.

0

모델 -이 경우 고객 -이 INotifyPropertyChanged 인터페이스를 구현하는 경우, viewMoodel은 모델 PropertyChanged 이벤트에 등록 할 수 있습니다. 이 방법으로 ViewModel은 발생하는 모든 속성 변경에 대한 정보를 얻고 그에 따라 반응 할 수 있습니다.

+0

그 해결책은 전체 그래프에서 각 엔티티에 대한 Propertychanged 이벤트에 가입해야하며 이는 나에게 너무 우아하지 않습니다. 게다가 모델 이벤트에 VM을 등록해야한다는 사실을 좋아하지 않습니다. 다른 모델이 표시 될 때마다 구독하고 구독 취소해야하기 때문입니다. 나는 또한 프레임 워크 수준에서 구현할 수있는 제네릭 솔루션을 찾고있다. (나는 추상적 인 BaseViewModel 레벨을 의미한다.) –

+1

어쨌든 프레임 워크의 일부가되어야하는 일종의 등록/등록 취소 기능이 필요할 것이다. 하지만 아마도 이것은 더 우아한 접근 일 것입니다. 메소드가있는 IModel과 같은 인터페이스를 도입 해보십시오. RegisterCallback (Action 콜백)을 사용하여 모델로부터 피드백을받습니다. 하나의 ViewModel과 통신하는 모델이 하나뿐이므로이 방법이 더 좋습니다. 그런 다음 ViewModel이 새 모델이 도입 될 때마다 새 콜백을 등록/등록 취소하도록합니다. 마지막으로 IModel을 구현하는 클래스에 제네릭 클래스 정의를 제한합니다. –

관련 문제