2012-02-25 11 views
16

mam combobox, który jest związany z kolumny DataTable tak:.obsłudze konwerter na przedmioty związane w combobox

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

IdNr w kolumnie zawsze zaczyna się od 4 litery a następnie z numerem ID (ex BLXF1234). Potrzebuję wyświetlić elementy w programie Combobox bez liter (potrzebuję 1234 do wyświetlenia w combobox).

więc napisałem Przelicznik:

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

Nie, jak mogę powiedzieć z combobox w użyciu konwertera, aby wyświetlić elementy? próbowałem to w XAML:

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

Ale nadal nie działa ... jakieś pomysły? Dzięki

+0

mmm ... nadal nie wiem, gdzie jest błąd ... – lebhero

+0

'DisplayMemberPath' jest ** ścieżką do właściwości **, aby wyświetlić nawet nie wiązanie. Jeśli zastosujesz konwerter, nic nie osiągniesz. –

+0

ok, dziękuję i tak sprawdzanie, co powinno być formatowanie elementów combobox !!!? – lebhero

Odpowiedz

42

można zmodyfikować ItemTemplate z ComboBox i korzystać z konwertera:

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

Każdy przedmiot jest związany z pozycjami w ItemsSource. Korzystając z konwertera w wiązaniu, możesz wykonać wybraną konwersję.

+0

Dziękuję, problem wiązał combobox w kodzie za ... ale to rozwiązało mój problem .. – lebhero

+1

Czy to naprawdę stosuje konwerter do którejkolwiek z pozycji na liście? Próbowałem kodu, ale wygląda na to, że konwerter jest używany tylko dla wybranego elementu. – tabina

+0

@tabina: Działa z prostym 'ComboBox', jak ten w mojej próbce. Być może masz bardziej złożony "ComboBox"? Oto odpowiedź na pytanie, które wydaje się być przeciwieństwem twojego problemu: http://stackoverflow.com/a/8247049/98607 –