2011-10-03 52 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

相關問題