2010-07-18 6 views
6

모음에 바인딩 된 콤보 상자가있어서 사용자가 항목 중 하나를 선택할 수 있습니다. 여태까지는 그런대로 잘됐다.ViewModel에 ValueConverter를 가질 수 있습니까?

콤보 상자의 내용은 항목에 의해 구동되지만 내 viewmodel의 값으로도 구동됩니다. 내 viewmodel의 값이 언어이고, 내 바인딩 된 항목의 언어로 설명 사전이 있고, 올바른 항목을 표시하고 싶다고 상상해보십시오.

어떻게해야합니까?

답변

1

ViewModel에서 Item 유형의 관찰 가능한 컬렉션을 만듭니다. 이 관찰 가능한 컬렉션에 뷰 모델의 itemsource를 바인딩하십시오.

public class Item 
{ 
public String description {get;set;} 
public String language {get;set;} 
public override ToString() 
{ 
     return description; 
} 
} 

선택한 항목도 Item 유형의 속성에 바인딩됩니다.

ToString의 재정의는 설명을 표시합니다.

선택한 항목 속성에는 언어를 가져올 수있는 선택한 개체 속성에 대한 참조가 있습니다.

2

이것은 ViewModel이 존재하는 이유에 대한 고전적인 예입니다. 주 모델뿐만 아니라 상태에 의존하는 논리를 갖고 싶습니다.

이 동작을 위해 ViewModel에 대해 실행되도록 단위 테스트를 작성한다고 가정 해보십시오. 선택한 항목에 속성을 매핑하려면 ViewModel이 필요합니다. ViewModel에는 위에서 언급 한 ViewModel의 값뿐만 아니라 선택한 항목에 따라 다른 속성도 있습니다.

이걸 ViewModel 디자인에 대한 테스트 중심 접근 방식이라고 생각합니다. 단위 테스트를 작성하여 평가할 수 없으면 상태와 게시 된 인터페이스가 섞여 있지 않습니다.

그래, ViewModel이 문제를 해결할 수 있으며 모든 상태를 ViewModel 내에서 통합 할 수 있습니다.

+0

앤디, 이것이 내가 가장 편하게 생각할 수있는 해결책이지만, 최선의 방법을 찾아 낼 수는 없습니다. 바인딩 할 콤보 박스의 사용자 정의 유형을 구현해야합니까? 변경 사항에 대한 알림을 받으면 모델에 값을 다시 넣어야합니까? –

+0

콤보에 대한 설명 전체가이 다른 값에 따라 변경되기를 원하십니까? –

+0

죄송합니다. Andy, 귀하의 의견을 놓쳤습니다. 예, 변경할 설명 전체가 필요합니다. 나는 그것을 할 수있는 몇 가지 방법을 생각할 수있다. –

관련 문제