2013-11-14 2 views
1

많은 다른 비즈니스 개체로 구성된 비즈니스 개체를 표시하고자하는 시나리오가 있습니다. 즉, 계층 적 구조입니다.ViewModel 생성

데이터를 표시하려면 masterDetail 유형의보기를 사용하고 싶지만 데이터를 더 깊고 깊게 파고 드는 많은 수준이 필요합니다.

그래서 객체의 루트에 일부 목록에서 항목을 선택하고 속성의 상세보기를 표시 할 수 있습니다, 그 상세보기에서 항목을 선택하고

등 등의 상세보기를 보여

만약 내가 데이터와 상호 작용하지 않았다면 모델에 바로 바인딩 할 수 있기 때문에 깊은 계층 구조 내의 각 모델에 대한 viewModel을 생성 할 필요가 없습니다.

데이터와 상호 작용하는 경우 뷰 모델을 사용하여 전체 비즈니스 개체와 해당 하위 항목을 래핑하고이를 바인딩하여 특정 논리를 수행하기위한 명령을 추가 할 수 있습니다.

그러나 특정 수준의 데이터와 만 상호 작용하려는 경우 어떻게해야합니까? XAML 또는 codeBehind에서 직접 모델과 상호 작용하려고하면 어수선해질 수 있습니다. 그러나 ViewModels로 모든 것을 마무리하는 것은 많은 작업입니다. 난 그냥 특정 지점

<DisplayControl DataContext="{Binding A}"> 
    <DisplayControl DataContext="{Binding B}"> 
     <InteractionControl DataContext="{Binding C, Converter{ConvertModelToViewModel}}"> 
     </InteractionControl > 
    </DisplayControl > 
</DisplayControl > 

하지만 그때 그 Viewmodels에 정리를 수행해야하는 경우에 viewModels을 만들 수 컨버터를 사용하는 것이

임 생각? 이벤트 등록을 취소 할 수 있습니다. 동일한 항목을 앞뒤로 이동할 때마다 동일한 모델에 대한 새로운 뷰 모델이 만들어집니다. 나는 가비지 콜렉션에 의존하고 싶지 않다. 뷰 모델을 유지하는 것이 그들이하는 일에 따라 비용이 많이 들고, GC가 발생하지 않을 수도있다. (예 : 정적 클래스의 이벤트에 등록하는 경우). 약한 이벤트를 사용하면 GC에 도움이되지만 값 비싼 ViewModel을 필요 이상으로 길게 유지하는 경우에는 도움이되지 않습니다.

+2

이것은 나에게 이해가되지 않습니다. – gleng

+0

viewmodels와 관련하여 [이 질문] (http://stackoverflow.com/questions/5421874/basic-concepts-of-mvvm-what-should-a-viewmodel-do)을 참조하십시오. – Dom

+0

이 질문은 실생활 MVVM 응용 프로그램을 구축하려고 시도한 모든 사람과 제공된 링크가 유용한 링크를 많이 포함하고 있지만 이해가됩니다. 특정 질문과 관련하여 도움이되지 않습니다. 유용한 답변을 기꺼이 제공하지 않으려 고 조용히하지 않는 이유는 무엇입니까? – Marc

답변

1

이 질문에 대한 일반적인 대답은 MVVM 응용 프로그램의 아키텍처를 참조하기 때문에 쉽지 않으며 여러 측면을 고려해야합니다. 아마도 두 가지 모범 사례를 만들고 제공하기 위해 의사 결정을 정렬하는 것이 도움이 될 것입니다. 이에 대한 해답은 스타일과 맛의 문제를 포함하기 때문에 언제나 강렬해질 것입니다 ...

자습서에서 종종 무시되는 상당한 수준의 인프라가 없으면 복잡한 MVVM 애플리케이션을 구축 할 수 없습니다. 특히 뷰, 뷰 모델 및 모델을 구성하고 모든 것을 결합하는 데 사용할 수있는 많은 개념이 있습니다.

내가 직접 모델에 바인딩하지 :

난 그냥 당신이 내가 당신이 언급 문제를 처리 한 방법의 아이디어를 줄 것이다. ViewModel은 애플리케이션이 커질수록 복잡 해지는 경향이 있으며 모델과 비교하여 추가적인 논리적 측면을 포함하지 않는 ViewModel은 실제로는 거의 없습니다. 변경 알림 (INotifyPropertyChanged)은 또 다른 측면입니다. UI 용도로만 변경 알림이 필요한 경우이 aspect를 ViewModel과 분리하는 것이 좋습니다. 유지 보수성과 확장 성을 위해 추가 노력을 기울이는 것이 좋습니다. 처음에 뭔가를 잊었 기 때문에 큰 redsign에 강요 받기를 원하지 않습니다.

ViewModel의 컬렉션을보기의 컬렉션과 동기화하는 것과 같은 일반적인 MVVM 작업을 처리하기위한 인프라를 구현합니다. See the answer here for details. 나는 ViewModel의 생성과 캐싱을 다룬 ViewModelFactory를 구축했다.이는 ViewModel의 재활용도 허용합니다 (더 이상 필요하지 않은 ViewModel 인스턴스를 가져 와서 모델을 재활용 모드의 UI 가상화와 유사한 개념으로 전환).

물론이 질문에 대한 완전한 대답은 아니지만 앞으로 나아갈 수 있기를 바랍니다. 좀 더 구체적인 질문이 있으시면 언제든지 저에게 돌아 오십시오.

+0

감사합니다. 귀하의 링크가 도움이 될 것입니다. MVVM을 사용하면 많은 일을 할 수 있으며 생산성을 높이기위한 방법을 찾고 있습니다. 예를 들어, 비즈니스 오브젝트는 100 개의 다른 클래스로 구성 될 수 있습니다. 실제로 각각 약간의 모델과 상호 작용할 예정이라면 각각에 대해 ViewModel을 만드는 것이 비생산적인 것처럼 보입니다. ViewModelFactory의 예제가 있습니까? Model 이벤트를 구독하는 ViewModels의 경우 언제 탈퇴합니까? – pastillman