2012-02-25 40 views
16

我有一個綁定到數據表列這樣的組合框:在組合框中綁定物品使用轉換器

ComboBox.DataContext = DataDataTable;     
ComboBox.DisplayMemberPath = DataDataTable.Columns["IDNr"].ToString(); 

的IDNR在列總是使用4個字母,後與ID號碼(例如BLXF1234 )。 我需要在沒有字母的組合框中顯示項目(我需要在組合框中顯示1234)。

所以我寫了一個轉換器:

class IDPrefixValueConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value != null) 
     { 
      string s = value.ToString(); 
      if (s.Contains("BL")) 
      { 
       return s.Substring(4); 
      } 
      else 
      { 
       return s; 
      } 
     } 
     return ""; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    }  

沒有,我怎麼能告訴組合框使用轉換器顯示的項目? 我想這在XAML:

ItemsSource="{Binding}" 
DisplayMemberPath="{Binding Converter={StaticResource IDPrefixValueConverter}}" 

但仍然沒有工作...任何想法? 感謝

+0

mmm ...仍然不知道錯誤在哪裏...... – lebhero 2012-02-25 23:08:43

+0

DisplayMemberPath是**屬性的**路徑,甚至不顯示綁定。如果你在那裏應用轉換器,你什麼都沒有。 – 2012-02-25 23:14:01

+0

好吧,謝謝反正我檢查應該格式化組合框項目!!!? – lebhero 2012-02-25 23:20:40

回答

42

您可以修改ComboBoxItemTemplate和使用轉換器:

<ComboBox ItemsSource="{Binding}"> 
    <ComboBox.ItemTemplate> 
    <DataTemplate> 
     <TextBlock Text="{Binding Converter={StaticResource IDPrefixValueConverter}}"/> 
    </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

每個項目都綁定到ItemsSource的項目。通過在綁定中使用轉換器,您可以執行所需的轉換。

+0

謝謝,問題是在後面的代碼中綁定組合框...但這解決了我的問題。 – lebhero 2012-02-26 00:19:32

+1

這是否真的將轉換器應用於列表中的任何項目?我嘗試了代碼,但它似乎只是轉換器只用於選定的項目。 – tabina 2013-10-15 12:49:49

+0

@tabina:它與我的示例中的一個簡單的'ComboBox'一起使用。也許你有一個更復雜的'ComboBox'?這裏回答的問題似乎與您的問題相反:http://stackoverflow.com/a/8247049/98607 – 2013-10-15 13:02:38