在哪里为XAML中集合的项设置转换器
本文关键字:设置 转换器 集合 XAML 在哪里 | 更新日期: 2023-09-27 18:10:22
我刚刚制作了第一个转换器,将整型转换为字符串。我有一个用整数(年)填充的组合框,但如果值为0,我希望组合框显示'All'。
这是我的转换器:
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;
问题是您试图转换整个集合而不是集合中的一个项目。
你会想这样做:
<ListBox ItemsSource="{Binding YearsCollection}">
<ListBox.ItemTemplate>
<DataTemplate>
<Border DataContext="{Binding Converter={StaticResource intToStringYearConverter}">
...
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
您不能像这样使用转换器,ItemsSource中的转换器应该转换整个集合,而不是单个项目。集合对象不能强制转换为整型,因此会得到异常。
您必须使用DataTemplate并对单个项目应用转换器。
或者——如果你需要的只是强制转换为整型——你可以使用ItemStringFormat。
另外,当源为空时,您可以使用绑定的TargetNullValue属性来设置默认消息。