2011-02-24 2 views
1

나는 viewmodel과이 뷰 모델의 데이터를 표시하는 usercontrol이있는 응용 프로그램을 작성하고 있습니다. 뷰 모델에는 엔티티 "약속"이 포함되어 있고 해당 약속에는 "사용자 이름"속성이 있습니다.viewmodel의 데이터가 필요한 WPF ValueConverter를 구현하는 방법은 무엇입니까?

약속을 표시 할 때 값 변환기를 사용하여 ("UserName"에 따라 다름)의 색을 얻고 싶지만 색은 실체 "약속"에 포함되어 있지 않습니다. 뷰 모델에서 엔티티 "사용자"를 사용하는 값 ​​변환기를 만들 수 있습니다.

컨버터 내부의 뷰 모델에서 다른 엔티티를 사용하는 가장 좋은 방법은 무엇입니까?

usercontrol에서 viewmodel에 액세스 할 수 있습니까? 내 viewmodel 클래스 내에서 변환기를 배치하려고했지만 usercontrol에서이 클래스에 액세스 할 수 있습니까? 각 약속도 색상을 포함하도록

  1. 는 뷰 모델을 조정 :

    나는 다음과 같은 가능성이 작동 할 수 있음을 알아 냈다. 그러나 나는보기 모델을 망치고 싶지 않기 때문에 이것을하고 싶지 않습니다.

  2. 시작할 때 viewmodel도 포함하는 클래스에서 converter-parameter를 설정하십시오. (이 일을합니까?)

  3. 사용 X : 참조 컴파일 타임에 알 수없는 뷰 모델로 변환 매개 변수를 데이터 바인딩 (이 가능합니까?)

답변

1

뷰 모델을 수정하기를 꺼리는 것이 좋습니다. 뷰 모델을 처음부터 갖는 목적은 뷰가 필요로하는 모든 것을 한 곳에서 찾을 수있게하기 위해서입니다. 뷰 모델을 수정하지 못하도록 정교한 가치 전환기를 마련하는 것은 더 많은 일을 수행함에 따라 유지 관리가 어려워지는 접근 방식입니다.

+0

정말 가장 쉬운 방법이라고 생각합니다. 또한 가장 성능이 뛰어난 것 중 하나입니다.하지만 이제는 WCF 서비스에서 가져 오는 약속 클래스를 포장해야한다는 사실을 싫어합니다 ... –

+0

여러분의 뷰 모델이하는 일이 아닌가요? ? –

2

변환기 매개 변수에 대한 방법입니다. 가기.

컴파일 타임에 뷰 모델을 알 수없는 이유는 무엇입니까? 바인딩은 어쨌든 컴파일 시간을 확인하지 않습니다.

UserControl.DataContext가 Appointment의 인스턴스로 설정되어 있는지, UserControl에서 DataContext로 설정하고있는 내용에 따라 매개 변수를 {Binding UserName} 또는 {Binding Appointment.UserName}으로 설정할 수 있어야합니다. .

+0

DataContext는 ObservableCollection of Appointments로 설정되며 사용자가 말한 것처럼 UserName과 같은 약속에서 데이터를 가져올 수 있습니다. 그러나 UserColor-Property는 약속에 포함되어 있지 않지만 다른 네임 스페이스에있는 다른 클래스를 사용하여 검색 할 수 있으며 전체 viewmodel을 호스팅합니다. –

관련 문제