我刚刚将第一个转换器从int转换为string。我有一个带有整数的组合框填充(年),但如果值为0,我希望组合框显示“全部”。
这是我的转换器:
public class IntToString : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
{
int intY = (int)value;
if (intY == 0)
{
String strY = "All";
return strY;
}
else
{
return intY.ToString();
}
}
return String.Empty;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
}
}
在XAML中我应该在哪里设置转换器?我尝试了组合框的ItemsSource:
ItemsSource="{Binding YearsCollection, Converter={StaticResource intToStringYearConverter}}"
但我总是在这一行得到InvalidcastException
:
int intY = (int)value;
答案 0 :(得分:7)
问题在于您尝试转换整个集合而不是集合中的一个项目。
你会想做这样的事情:
<ListBox ItemsSource="{Binding YearsCollection}">
<ListBox.ItemTemplate>
<DataTemplate>
<Border DataContext="{Binding Converter={StaticResource intToStringYearConverter}">
...
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 1 :(得分:2)
你不能像这样使用转换器,ItemsSource中的转换器应该转换整个集合,而不是单个项目。集合对象不能转换为整数,因此您将获得异常。
您必须使用DataTemplate并将转换器应用于单个项目。
或者 - 如果您需要的所有内容都被转换为int - 您可以使用ItemStringFormat。
此外,要在源为null时设置默认消息,可以使用绑定的TargetNullValue属性。