【发布时间】: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