【问题标题】:WPF C# Binding Converter Issue when swapping out content换出内容时出现 WPF C# Binding Converter 问题
【发布时间】:2013-08-24 10:52:19
【问题描述】:

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

【问题讨论】:

  • 为什么你不简单地检查 value 是否在做演员之前不为空?
  • 当您说“当我将内容切换到其他内容时”是什么意思?
  • @Sheridan 我的应用程序有一个 ContentControl,它显示不同的 UserControl,每个都有一个伴随的 ViewModel。这些绑定到 ContentControl 的 Content 属性。当 ContentControl 内容从具有上述 ComboBox 的 View/VM 更改为不同的 View/VM(或 ContentControl Content 设置为 null)时,我在 Converter 的 Convert 方法中打断点。我想知道为什么会这样。

标签: c# wpf xaml binding converter


【解决方案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;
}

更新>>>

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

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

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

【讨论】:

  • 是的,这实际上就是我现在为“解决”问题所做的。但我真的很想知道为什么当我交换内容时甚至会调用这个转换器。对我来说似乎没有意义。
猜你喜欢
  • 2011-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 1970-01-01
  • 2016-09-16
  • 2012-05-30
相关资源
最近更新 更多