모음에 바인딩 된 콤보 상자가있어서 사용자가 항목 중 하나를 선택할 수 있습니다. 여태까지는 그런대로 잘됐다.ViewModel에 ValueConverter를 가질 수 있습니까?
콤보 상자의 내용은 항목에 의해 구동되지만 내 viewmodel의 값으로도 구동됩니다. 내 viewmodel의 값이 언어이고, 내 바인딩 된 항목의 언어로 설명 사전이 있고, 올바른 항목을 표시하고 싶다고 상상해보십시오.
어떻게해야합니까?
모음에 바인딩 된 콤보 상자가있어서 사용자가 항목 중 하나를 선택할 수 있습니다. 여태까지는 그런대로 잘됐다.ViewModel에 ValueConverter를 가질 수 있습니까?
콤보 상자의 내용은 항목에 의해 구동되지만 내 viewmodel의 값으로도 구동됩니다. 내 viewmodel의 값이 언어이고, 내 바인딩 된 항목의 언어로 설명 사전이 있고, 올바른 항목을 표시하고 싶다고 상상해보십시오.
어떻게해야합니까?
ViewModel에서 Item 유형의 관찰 가능한 컬렉션을 만듭니다. 이 관찰 가능한 컬렉션에 뷰 모델의 itemsource를 바인딩하십시오.
public class Item
{
public String description {get;set;}
public String language {get;set;}
public override ToString()
{
return description;
}
}
선택한 항목도 Item 유형의 속성에 바인딩됩니다.
ToString의 재정의는 설명을 표시합니다.
선택한 항목 속성에는 언어를 가져올 수있는 선택한 개체 속성에 대한 참조가 있습니다.
이것은 ViewModel이 존재하는 이유에 대한 고전적인 예입니다. 주 모델뿐만 아니라 상태에 의존하는 논리를 갖고 싶습니다.
이 동작을 위해 ViewModel에 대해 실행되도록 단위 테스트를 작성한다고 가정 해보십시오. 선택한 항목에 속성을 매핑하려면 ViewModel이 필요합니다. ViewModel에는 위에서 언급 한 ViewModel의 값뿐만 아니라 선택한 항목에 따라 다른 속성도 있습니다.
이걸 ViewModel 디자인에 대한 테스트 중심 접근 방식이라고 생각합니다. 단위 테스트를 작성하여 평가할 수 없으면 상태와 게시 된 인터페이스가 섞여 있지 않습니다.
그래, ViewModel이 문제를 해결할 수 있으며 모든 상태를 ViewModel 내에서 통합 할 수 있습니다.
앤디, 이것이 내가 가장 편하게 생각할 수있는 해결책이지만, 최선의 방법을 찾아 낼 수는 없습니다. 바인딩 할 콤보 박스의 사용자 정의 유형을 구현해야합니까? 변경 사항에 대한 알림을 받으면 모델에 값을 다시 넣어야합니까? –
콤보에 대한 설명 전체가이 다른 값에 따라 변경되기를 원하십니까? –
죄송합니다. Andy, 귀하의 의견을 놓쳤습니다. 예, 변경할 설명 전체가 필요합니다. 나는 그것을 할 수있는 몇 가지 방법을 생각할 수있다. –