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

本文关键字:绑定 转换器 问题 WPF 交换 | 更新日期: 2023-09-27 18:28:42

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

基本上:

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>

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

这个怎么样?:

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

更新>>>

好的,那么你想知道为什么你在Converter类中收到null值。。。总之,我不能回答这个问题。但是,我有一个WPF应用程序,它有一个与ContentControl绑定的可互换视图模型,与您描述的方式相同,所以我做了一个小实验。

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

因此,如果不提供更多的代码,甚至可能是MVVM Light Toolkit源代码中的代码,就很难找到获得null值的原因。也许接受这种情况并编程否定这一事实会更简单,例如检查null