문제

Stackoverflow 질문에 대해 WPF 변환기는 MVVM 패턴으로 어떻게 사용할 수 있습니까? 나는 값 변환기가 MVVM 패턴으로 사용해서는 안된다는 것을 배웠습니다. 값 변환기의 기능은 ViewModel 자체에 의해 처리되어야합니다..

이것은 의미가 있습니다.

그러나 나는 당신이해야한다는 것을 읽는 것을 기억합니다 XAML 요소를보기에 노출시키지 마십시오, 대신 뷰가 데이터 emplates를 사용하여 바인딩하고 표시하는 데이터 모음 만 노출시킵니다.

그러나 변환기는 매우 강력 해 보입니다 (예 : MVVM 템플릿 데모, 포장을 풀고 나서 "메신저 샘플"을 참조하십시오) 객체를 물체로 변환 할 수 있습니다, 예를 들어, 메시지 개체는 흐름 문서 개체 또는 고객 객체를 가시성 객체 또는 이미지에 대한 사용자 정의 상태 객체 등으로 대상으로합니다.

따라서 뷰 모델이 진행되는 경우 값 변환기의 기능을 사용하십시오, 스택 패널, 가시성, 색상, 흐름 문서 등과 같은 XAML 요소 및 속성을 노출해야합니까?

뷰 모델이 값 변환기처럼 이러한 풍부한 XAML 객체를 노출해서는 안되는 이유가 있습니까?

도움이 되었습니까?

해결책

그렇다면 뷰 모델은 특정 시각적 표현으로 만 사용하도록 제한하기 때문입니다. ViewModel이 XAML에 방출되면 디자인 컨텐츠를 개발자의 도메인에 넣습니다. 이는 Expression Blend를 사용하는 설계자가 설계 자산을 편집 할 수 없으며 디자이너/개발자 워크 플로가 고장 났음을 의미합니다. XAML을 페이지에 유지하고 데이터 템플릿과 함께 값 변환기를 사용하면 디자인이 코드와 분리됩니다.

ViewModel이 특정 XAML을 노출하면 해당 특정 인스턴스에서만 사용되는 ViewModel을 제한하고 재사용이 덜 가능합니다.

다른 팁

DataTemplates도 사용할 수 있다는 것을 잊지 마십시오. ValueConverters를 MVVM에서 보관하는 데 어떤 의미가 있는지 볼 수 있지만 DataTemplates는 객체를 GUI로 변환하는 것입니다.

ViewModel은 다른 객체 (예 : 중첩 뷰 모델)를 GUI에 노출시킬 수 있으며 GUI는 사용할 수 있습니다. <DataTemplate DataType="{x:Type SubViewModel}">... 이러한 개체를 GUI에 매핑합니다.

뷰 모델이 값 변환기처럼 이러한 풍부한 XAML 객체를 노출해서는 안되는 이유가 있습니까?

물론, 그것은 MVVM의 모든 목표를 훼손하기 때문에 :

  1. 당신은 더 이상 단위 테스트 가능하지 않으며, 적어도 쉽게는 쉽지 않습니다.
  2. 더 이상 논리 (보기 모델)와 프레젠테이션 (보기)을 분리하지 않습니다. 따라서 디자이너와 개발자는 쉽게 협력 할 수 없습니다.
  3. 코드 유지 보수는 우려 사항을 혼합했기 때문에 더 어렵습니다.

보기 모델이 뷰를 반환하는 것을 보았을 때, 나는 그것을 MVVM으로 분류하지 않을 것입니다.

MVVM/MVC/MVP 등에 대한 아이디어 중 하나는 GUI 코드를 하나의 파일/클래스로 격리하는 것입니다. 이렇게하면 다른 개체를 다시 작성하지 않고 다른 UI로 변경할 수 있습니까? WPF 특정 개체를 지나가는 경우 답은 아니오라고 생각합니다. 그것은 당신이 당신을 위해 만들어야 할 가치 판단입니다.

커뮤니티의 마음이 왜이 방향으로와 같이 바뀌 었는지에 대한 관점없이 논의 할 때이 개념이나 다른 많은 개념에 적합한 절대적인 100% 규칙은 없습니다. 당시에 얼마나 새롭거나 설득력이 있는지에 관계없이 '전통적인 지혜'에서 '가정'진실이나 과학은 없습니다.

다시 말해서 - 당신의 선한 것처럼 팀과 최선을 다하면, 당신은 이미 이것만큼 실제보다 인간의 관심사에서 훨씬 더 많은 것을 끌어 당기고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top