当我的源只有整数月值时,我的整数到月转换器似乎可以在组合框中显示月份名称。但是,我的程序使用来自MVVMLight的消息来交换内容,所以我没有那么多窗口。当我将内容切换到不同的内容时,为什么会调用Convert方法?通常,转换器获取整数并将其转换为字符串。但是在交换内容时,它会接收空字符串作为值,从而产生InvalidCastException。我该怎么办?我包含了一个严重愚蠢的代码,模拟这个只是在按下按钮后设置Content = null。谢谢! items source绑定到一个singelton的int列表来表示月份。
基本上:
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:
<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>
答案 0 :(得分:1)
这个怎么样?:
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;
}
更新&gt;&gt;&gt;
好的,所以你想知道为什么你的null
课程会收到Converter
的价值......简而言之,我无法回答这个问题。但是,我有一个WPF应用程序,其可更换视图模型以与您描述的相同方式绑定到ContentControl
,因此我做了一个小实验。
我有一个DebugConverter
,它基本上是一个空的Converter
类,只是简单地返回输入值。我可以将它挂钩到任何Binding
并在其中放置一个断点来检查正在传递的值。所以我将它连接到我的可互换视图模型Binding
中,即使在几次视图更改之后,输入值null
也没有。
因此,如果没有提供更多代码,甚至可能在MVVM Light Toolkit源代码中提供更多代码,那么找出你获得null
值的原因可能会非常棘手。或许更容易接受它发生并且计划否定这一事实,例如。检查null
。