WPF C#绑定转换器在交换内容时出现问题

时间:2013-08-21 21:31:42

标签: c# wpf xaml binding converter

当我的源只有整数月值时,我的整数到月转换器似乎可以在组合框中显示月份名称。但是,我的程序使用来自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>

1 个答案:

答案 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