2012-02-25 22 views
16

ben böyle bir datatable kolona bağlı olduğu bir combobox var. 4 harfler Kimlik Numarası (ex takip ileKullanım dönüştürücü

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

Sütun içinde IDNr daima başlar BLXF1234). Öğeleri Mektuplar olmadan Combobox'ta görüntülemem gerekiyor (combobox'ta görüntülenecek 1234'e ihtiyacım var).

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(); 
    }  

Hayır, nasıl öğeleri görüntülemek için dönüştürücü kullanımı combobox söyleyebilir:

Yani ben bir dönüştürücü yazdı? i Xaml bu çalıştı:
ItemsSource="{Binding}" 
DisplayMemberPath="{Binding Converter={StaticResource IDPrefixValueConverter}}" 

Ama

hala ... herhangi bir fikir çalışmıyor? Teşekkür

+0

mmm ... hala hatanın nerede olduğunu bilmiyorum ... – lebhero

+0

'DisplayMemberPath', bir bağın olmaması için ** bir özelliğin ** yoludur. Eğer dönüştürücüyü uygularsanız, hiçbir şey elde edemezsiniz. –

+0

tamam, yine de teşekkürler combobox öğeleri biçimlendirme ne olmalıdır kontrol! – lebhero

cevap

42

Sen ComboBox ait ItemTemplate değiştirebilir ve dönüştürücü kullanabilirsiniz:

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

her öğe ItemsSource öğelere bağlıdır. Dönüştürücü bağlayıcı kullanarak, istediğiniz dönüşümü gerçekleştirebilirsiniz.

+0

Teşekkürler, sorun kodun arkasındaki kodda bağlayıcı oldu ... ama bu benim problemimi çözdü .. – lebhero

+1

Bu gerçekten dönüştürücüden listedeki herhangi bir öğeye uygulanmış mı? Kodu denedim ama dönüştürücü sadece seçilen öğe için kullanılmış gibi görünüyor. – tabina

+0

@tabina: Örneğimdeki gibi basit bir 'ComboBox' ile çalışır. Belki daha karmaşık bir ComboBox'ınız var mı? İşte sorununun tam tersi gibi görünen bir sorunun cevabı: http://stackoverflow.com/a/8247049/98607 –