0

当我的源只有整数月份值时,我的整数到月份转换器似乎可以很好地在组合框中显示月份名称。但是,我的程序使用来自 MVVMLight 的消息来交换内容,所以我没有那么多窗口。当我将内容切换到不同的内容时,为什么会调用 Convert 方法?通常,转换器获取一个整数并将其转换为字符串。但是在交换内容时,它会接收空字符串作为值,因此会产生 InvalidCastException。我该如何解决?我包含了一个严重简化的代码,它模拟这只是在按下按钮后设置 Content=null 。谢谢!项目源绑定到一个整数列表以表示月份。

基本上:

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>
4

1 回答 1

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;
}

更新>>>

好的,所以您想知道为什么您会null在课堂上获得价值Converter……简而言之,我无法回答。但是,我有一个 WPF 应用程序,它的可互换视图模型以ContentControl您描述的相同方式绑定到 a,所以我做了一个小实验。

我有一个DebugConverter基本上是一个空Converter类,它只是简单地返回输入值不变。我可以将它连接到任何一个Binding并在其中放置一个断点以检查正在传递的值。所以我将它连接到我的可互换视图模型Binding中,即使在几次视图更改之后,输入值也没有null

null因此,如果您不提供更多代码,甚至可能在 MVVM Light Toolkit 源代码中提供代码,那么要找出获取值的原因可能会很棘手。也许接受它发生并计划否定这一事实会更简单,例如。与检查null

于 2013-08-21T22:10:04.197 回答