2011-10-03 51 views
3

我刚把我的第一个转换器从int转换为字符串。我有一个组合框填充整数(年),但如果值为0,我希望组合框显示'全部'。哪里可以设置转换为XAML集合中的项目

这是我的转换器:

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; 

回答

7

问题是,您正在尝试转换整个集合,而不仅仅是集合中的一个项目。

你会想要做这样的事情:

<ListBox ItemsSource="{Binding YearsCollection}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Border DataContext="{Binding Converter={StaticResource intToStringYearConverter}"> 
      ... 
      </Border> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
2

不能使用这样的转换,在转换的ItemsSource应该是整体转换收集,而不是单个项目。集合对象不能转换为整数,所以你会得到异常。

您必须使用DataTemplate并将转换器应用于单个项目。

或者 - 如果您只需要将其转换为int,则可以使用ItemStringFormat

此外,为了设置源为空时的默认消息,您可以使用绑定的TargetNullValue属性。

+0

我改变了设置它为selectedValue,则是好? – Kobe

相关问题