MVVM 빛의
기본 사용법
- 초기화하기
- 는
- 항상 모든 뷰 모델을 포함하는 ViewModelLocator 클래스를 작성 BaseClass로부터 ViewModels 만들기 App.cs 파일의 Application_Startup 기능에 DispatcherHelper 응용 프로그램에 링크되어 있습니다. 리소스
- RelayCommands를 사용하여보기에 함수를 표시하십시오.
- DispatchHelper를 사용할시기를 학습합니다.
클린 업 아이디어 :
- 적절한 정리에 DomainContext의 EntitySet을 취소하여 뷰 모델에 추가()?
- ViewModelLocator의 CleanupSomeVM() 함수를 호출하여 더 이상 애플리케이션에서 더 이상 필요하지 않은 뷰 모델을 지우십시오.
클린업 기능을 사용할시기/방법에 대해 다른 사람들의 의견을 듣고 싶습니다. 내 응용 프로그램이 커짐에 따라 클라이언트 메모리 사용을보다 잘 관리 할 수있는 정리 기능을 추가해야 할 필요성을 느낍니다. 혼련를 들어
:
- 인터페이스에 추상 서비스/쿼리 구현.
- 각 서비스 구현 클래스에 대해 2 개의 클래스를 만듭니다 (디자인에 대해 1, 프로덕션에 대해 1)
- 각 ViewModel 내에서 필요에 따라 자체 서비스 클래스 (IsInDesignMode 사용)를 구현하여 Blendable Service 구현을 만듭니다.
- 서비스 임 플레멘 테이션 클래스 내에서 DomainContext를 유지하려면 정적 변수를 사용하십시오.
- ViewModels의 생성자에 DispatcherHelper.Initialize()를 추가합니다 (디자인 모드에있을 때만). 블렌드는 페이지를로드 할 때 응용 프로그램을로드하지 않으며이 문제를 해결합니다. 추가 된 비즈니스 로직
:
- 는 뷰 모델에 후, 먼저 모델에서 비즈니스 로직을 추가합니다.
- 모델의 부분적인 방법을 사용하여 적절한 변경/업데이트 이벤트에 대한 논리를 추가하십시오.
- 모델에 요약 및 계산 된 값을 제공하는 읽기 전용 속성 (getter 만)을 추가합니다.보기를 들어
:
- 항상 로케이터 개체에 루트 바인딩.
- 레이아웃 또는 사용자 정의 UI 로직에만 코드 숨김 로직을 유지하십시오. ViewModel을 참조하지 마십시오. 모음에 대한
: 당신의 ViewModels으로 수집
- 사용 CollectionViewSource의 DomainContext의 EntitySet
- 의 소스를 적용 모든 필터링, 정렬, 당신의 ViewModel에서 CollectionViewSource로 그룹화 논리.
- ServiceCalls 후에 UI를 업데이트하는 데 필요한대로 CollectionViewSource 개체의 .View.Refresh()를 호출하십시오. 뷰 모델 조정 (컨트롤러 로직)에 대한
는
- 를 사용하여 메시지 드물게, 너무 많은 복잡성을 관리하기가 어려울 수 있습니다.
- NotificationMessage 및 PropertyChangedMessage 클래스를 사용하여 보내기/받기. RIA DomainServices를 들어
:
- 이 계속 변경 기능의 모든 로그가 아닌 업데이트/삽입을 구현/로직을 삭제합니다.
- 삽입, 업데이트, 삭제 중 탐색 속성을 통해 다른 엔터티를 참조해야하는 경우 먼저 EntityStatus를 확인하거나 다른 Context에서 엔터티를로드하여 EntityStatus 충돌을 방지하십시오. 디버깅/테스트를위한
:
- 확인 출력 바인딩 오류에 대한 창 및이를 수정합니다. 바인딩 오류는 자동으로 사용자에게 전달되지 않지만 응용 프로그램 성능과 예상되는 동작을 저하시킵니다.
- 1을 유지 :
- 서버 측 로직과 기능 엔티티 프레임 워크에 대한
을 테스트하는 단위 테스트 프로젝트를 만듭니다
- 이 추가 된 모델/비즈니스 로직을 확인하기 위해 실버 라이트에서 단위 테스트 만들기 도메인 서비스에 대한 EntitiesContext의 1 대 1 일치. 이 다른 방법으로 분할하려고하면 문제가 발생합니다.
- 삽입, 업데이트 및 삭제 논리를 신중하게 작성하는 데 많은 시간을 할애하지 않으려면 [구성] 속성을 사용하지 마십시오.
- 별도의 서비스를 사용하여 사용자 정의 유형을 RIA 클라이언트에 다시 제공하십시오. EntityFramework 개체의 DomainService에 추가하지 마십시오.
- 삽입, 업데이트, 삭제 기능이 아니라 PersistChangeSet 함수에서 서버 측 업데이트/통합 논리 (다른 시스템 업데이트 등)를 수행합니다.이렇게하면 네비게이션 속성을 통해 실수로 엔티티를 가져 오는 것을 방지 할 수 있습니다.이 경우 분리되지 않은 버전은 업데이트되지 않습니다.
- 업데이트/통합 로직 중에 현재 값을 찾으려면 추가 컨텍스트를 만듭니다.
누구나 편집 할 수 있도록이 내용을 커뮤니티 위키로 변환하십시오. –
나는 그것을 com-wiki로 생각하지 않을 것이다. 구도자는이 좋은 질문에 대한 명성을 가질 자격이있다. – Shimmy