2013-08-21 1 views
0

내 정수를 월 변환기로 사용하는 경우 콤보 상자에 달 이름을 표시하는 데 정수가 사용됩니다. 그러나 내 프로그램은 MVVMLight의 메시징을 사용하여 콘텐츠를 스왑하므로 많은 창이 없습니다. 콘텐츠를 다른 콘텐츠로 전환 할 때 Convert 메서드가 호출되는 이유는 무엇입니까? 일반적으로 변환기는 정수를 가져 와서 문자열로 변환합니다. 그러나 내용을 교환 할 때 값으로 빈 문자열을 받아 InvalidCastException을 생성합니다. 어떻게 해결할 수 있습니까? 나는 버튼을 누른 후에 Content = null을 설정하는 것만 큼 진지하게 어리석은 코드를 포함시켰다. 감사! 아이템 소스는 달을 나타내는 int의 싱글 톤 목록에 바인딩됩니다. 기본적으로WPF C# 바인딩 변환기 내용을 스왑 아웃 할 때의 문제

:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     string answer = ""; 

     switch ((int)value) 
     { 
      case 1: 
       { 
        answer = DatesInfo.Instance.MonthsNames[0]; 
        break; 
       } 

      default: 
       { 
        break; 
       } 

     } 

     return answer; 
    } 

XAML : 당신은 이유를 알고 싶어하므로,

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    if (value.GetType() != typeof(int)) return false; // <-------- 
    string answer = ""; 
    switch ((int)value) 
    { 
     case 1: 
     { 
      answer = DatesInfo.Instance.MonthsNames[0]; 
      break; 
     }    
     default: 
     { 
      break; 
     } 
    } 
    return answer; 
} 

UPDATE >>>

확인을? :

<ComboBox Width="200" Height="30" SelectedItem="{Binding SelectedItem.Month}" 
    ItemsSource="{Binding MonthsValues, Source={x:Static local:DatesInfo.Instance}}"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Converter={StaticResource MonthNameConverter}}" /> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 
+1

왜 캐스팅을하기 전에 단순히 'value'가 널이 아닌지 확인하지 않으십니까? – Alberto

+0

'콘텐츠를 다른 콘텐츠로 전환 할 때'라고 정확히 말할까요? – Sheridan

+0

@Sheridan 내 응용 프로그램에는 서로 다른 UserControls를 표시하는 ContentControl이 있으며 각 뷰에는 ViewModel이 있습니다. 이들은 ContentControl의 Content 속성에 바인딩됩니다. 위의 ComboBox가있는 View/VM에서 ContentControl 콘텐츠가 다른 View/VM (또는 ContentControl Content가 null로 설정 됨)으로 변경되면 변환기의 변환 방법에서 중단 점에 도달합니다. 이 일이 왜 발생하는지 알고 싶습니다. –

답변

1

어떻게 이것에 대해을받습니다. 귀하의 Converter 클래스의 가치가... 글쎄, 간단히 말해서, 나는 대답 할 수 없다. 그러나, 당신이 설명하는 것과 같은 방식으로 ContentControl에 바인딩 된 상호 교환 가능한 뷰 모델을 가진 WPF 응용 프로그램을 가지고 있으므로 약간의 실험을했습니다.

는 단순히 입력 값이 변경되지 반환 빈 Converter 클래스는 기본적으로하는 DebugConverter 있습니다. 이것을 어떤 Binding에 연결하고 통과 점에 값을 확인하기 위해 중단 점을 넣을 수 있습니다. 그래서 그것을 내 상호 교환 가능한 뷰 모델 Binding에 넣었습니다. 심지어 몇 번의 뷰 변경 후에도 입력 값은 null이 아니 었습니다.

null 값을 얻는 이유는 MVVM Light Toolkit 소스 코드 내에서 더 많은 코드를 제공하지 않으면 까다로울 수 있습니다. 아마 그 일이 일어 났음을 받아 들여 그 사실을 부정하는 프로그램을 만드는 것이 더 간단 할 것입니다. null을 확인하십시오.

+0

예, 실제로 제가 지금 문제를 "고쳤습니다". 하지만 난 정말이 변환기가 심지어는 콘텐츠를 바꿀 때 호출되고 있는지 알고 싶어요. 그것이 나에게 의미가있는 것처럼 보이지 않습니다. –