이 질문은 this older의 후속 조치이며 열린 질문보다 확인 된 것입니다.MVVM에 계층 적 데이터 구조로 편집을 추가하십시오.
내 ViewModel 인스턴스에는 모델의 개인 인스턴스 _modelInst
이 있습니다.
ViewModel은 편집하는 동안 모델의 데이터에 독점적으로 액세스하므로 모델에서 INotifyPropertyChanged를 구현할 필요가 없습니다. 얻기
/모델 인스턴스에 직접 설정
예 :이제 세 가지 방법 내가보기에서 모델 데이터를 편집하는 방법에 내놓았다있다 간단한 값 필드
return _modelInst.fieldname;
_modelInst.fieldname = value;
에 대한이 하나의 쉽게 구현할 수 ...뷰 모델 인스턴스를 생성 및 부모의 데이터 구조에서 작동
예를 들어, 해당 유형에 대한 새 뷰 모델을 만들기- : 더 복잡한 오브젝트 구조체 같은 유형.
ViewModel은 부모와 필드 이름을 알고 있습니다. ContentControl에 + DataTemplate을 - 설정/획득에 그 표시
- : 단지 하나의 필드가 변경되는 경우에도 전체의 원래 목적을 덮어 파라미터로서 필드 명,
와 상위의 방법을 통해
이는 각 구조에 대해 부모가 구현 한 새 인터페이스 (
_modelInst
에서 작동하는 업데이트 루틴 포함)를 만드는 것을 의미합니다. 부모의 데이터 구조의 직접적인 지식의 ViewModel 인스턴스를 생성- : 더 복잡한 오브젝트 구조체 같은 유형.
예를 들어,- 명령을 통해 부모에게 업데이트 지침을 보내는 각 클래스
에 대한 새로운 뷰 모델을 만들기 부모 클래스
내에서 (목록) 클래스
- 메시지
- 반성 (부모는 어떤 자식이 함수를 호출했는지 알고 있습니다.
)
) 저장된 모든 아이들에게이 모든 에 대한 편집 가능한 모델의 모든 분야를 기능을 만들어 구현하는 큰 엉망이다.하나는 각 하위 객체가 부모와의 알고 혼자 반사를 통해 작동하는 일반적인 뷰 모델을 만들 수
(4) 모델의 거의 모든 필드를 의미
... fieldname (목록에있는 경우 + 색인).
루트의 논리 만 모델을 간섭합니다.
그러나 그 해결책은 _modelInst
내의 필드에 경로를 저장하는 방법을 필요로합니다.
이 작업을 수행하는 다른 (더 간단한) 방법이 있습니까?
MVVM의 원칙을 잘못 이해 했습니까?
MVVM은 대형 계층 적 데이터 구조를 조작하는 데 적합합니까?
는 대한 ICommand의 객체를 구현하는 CustomerViewModel을 만들 수 있습니다. 그런 다음보기는 이러한 ICommand 개체에 바인딩해야하며 Customer (가장 가능성있는보기의 어딘가에있는 Binding) 유형의 CommandParameter를 보냅니다. –
평면 구조에서 효과적입니다. 고객 목록그러나'contact contacts'와 같이'contact'가'business, customer, private'에 대한 기본 클래스이고'business'가'list '... 인 트리 구조가 더 복잡한 경우 어떻게 될까요? –
각 모델에 대해 별도의 ViewModel을 사용하고 있습니까? 파생 클래스의 경우,'Business business = contact as Business; if (business! = null) [비즈니스와 관련된 일들]' –