2009-07-12 4 views
12

저는 BlockId를 ConditionLabel로 변환하는 IValueConverter를 가지고 있습니다. 문제는 내 Model 객체가 실제 변환을 수행하는 현명한 방법이라는 것입니다.XAML의 IValueConverter에 데이터를 전달하는 방법은 무엇입니까?

<local:BlockIdToConditionLabelConverter 
    x:Key="_blockIdToConditionLabelConverter" /> 

: 내 코드는 순간

public class BlockIdToConditionLabelConverter : IValueConverter 
{ 
    private Model _model; 

    public BlockIdToConditionLabelConverter(Model model) 
    { 
     _model = model; 
    } 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     int blockId = (int)value; 
     return _model.BlockIdToConditionLabel(blockId); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return Binding.DoNothing; 
    } 
} 

, 나는 이런 ResourceDictionary에 (나중에 DataTemplate을에서 참조)에 정적 리소스를 만들 ... 지금까지 다음과 같습니다 문제는,이 변환기에 내 Model 객체를 전달할 방법이 필요하다는 것입니다. 내가 어떻게 그럴 수 있니?

감사합니다.

답변

7

이것은 값 변환기의 일반적인 문제입니다.

MVVM 패턴을 사용하는 경우 모델의 ViewModel 내에 변환을 구현하여 해당 문제를 해결할 수 있습니다.

그렇지 않은 경우 this post on MSDN forums을 살펴볼 수 있습니다. (샘 벤트 - MSFT에서 대답)

목표는 컨버터에 모델을 전달하기 위해 멀티 바인딩을 사용하는 것입니다.이 경우 DataContext를 전달하십시오.

+0

이제는 MVVM을 읽는 중입니다. 패턴을 사용하여 문제를 해결하고 싶다는 생각이 들었습니다. 어떻게하면 변환기를 넣을 수 있습니까? 논리? 아직 "모델의 ViewModel 내부에서 변환을 구현하는 것"에 대해 이해하기에 충분하지 않습니다. 이것은 IValueConverters를 전혀 사용하지 않는다는 것을 의미합니까? 또는 ViewModel (XAML 마크 업이 아닌)이 인스턴스화 작업을 가지고 있는지 여부 감사! – devuxer

+1

Model 클래스가 어떻게 구현되는지 잘 모르겠습니다. MVVM에서 모델을 WPF의 DataContext로 사용하는 대신 ViewModel을 DataContext로 사용합니다. 본인이 원래 모델의 BlockId 속성을 바인딩했다고 추측합니다. ViewModel에는 BlockId 대신 바인딩 할 ConditionLabel 속성이 있습니다. 이 속성은 getter 내부에서 변환을 수행합니다. ViewModel이 모델의 PropertyChanged에 등록되므로 ViewModel에서 RaisePropertyChange ("ConditionLabel")를 수행 할 수 있습니다. – decasteljau

+0

MVVM에 대해 좀 더 읽었습니다. 그래서 이것은 의미가 있습니다. 내 ViewModel에 변환 된 데이터를 저장하고 IValueConverters를 완전히 제거 할 수 있습니다. 한 가지 잡다한 점은이 IValueConverter를 GridView와 함께 사용하려고했기 때문에 하나의 속성이 아니라 ViewModel에 변환 된 데이터의 전체 테이블을 저장해야한다는 것입니다. IValueConverter가 여전히 의미가 있습니까? 그리고 Block이 완전한 밝은 회색 인 모든 GridView 셀을 변환하려면 어떻게해야합니까? ViewModel에 "IsComplete"테이블을 저장하더라도 색상으로 변환해야합니다. – devuxer

관련 문제