내 정수를 월 변환기로 사용하는 경우 콤보 상자에 달 이름을 표시하는 데 정수가 사용됩니다. 그러나 내 프로그램은 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>
왜 캐스팅을하기 전에 단순히 'value'가 널이 아닌지 확인하지 않으십니까? – Alberto
'콘텐츠를 다른 콘텐츠로 전환 할 때'라고 정확히 말할까요? – Sheridan
@Sheridan 내 응용 프로그램에는 서로 다른 UserControls를 표시하는 ContentControl이 있으며 각 뷰에는 ViewModel이 있습니다. 이들은 ContentControl의 Content 속성에 바인딩됩니다. 위의 ComboBox가있는 View/VM에서 ContentControl 콘텐츠가 다른 View/VM (또는 ContentControl Content가 null로 설정 됨)으로 변경되면 변환기의 변환 방법에서 중단 점에 도달합니다. 이 일이 왜 발생하는지 알고 싶습니다. –