2012-02-25 14 views
16

tengo un cuadro combinado que está unido a una columna de tabla de datos como esto:.Uso del convertidor de partidas consolidadas en cuadro combinado

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

El IdNr en la columna comienza siempre con 4 letras seguidas con el número de identificación (ex BLXF1234) Necesito mostrar los elementos en Combobox sin las letras (necesito que se muestre 1234 en el cuadro combinado).

Así que escribí un convertidor:

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

No, ¿cómo puedo saber el desplegable de utilizar el convertidor para mostrar los elementos? he intentado esto en el XAML:

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

Pero aún no funciona ... alguna idea? Gracias

+0

mmm ... aún no se sabe dónde está el error ... – lebhero

+0

'DisplayMemberPath' es ** una ruta a una propiedad ** para mostrar ni siquiera un enlace. Si aplicas el convertidor allí, no logras nada. –

+0

bien, gracias de todos modos iam comprobando qué formato deberían tener los elementos del cuadro combinado !!! – lebhero

Respuesta

42

se puede modificar el ItemTemplate del ComboBox y utilizar su convertidor:

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

Cada elemento está unido a los elementos de la ItemsSource. Al usar el convertidor en el enlace, puede realizar la conversión que desee.

+0

Gracias, el problema estaba atando el cuadro combinado en el código detrás ... pero esto resolvió mi problema ... – lebhero

+1

¿Esto realmente aplica el convertidor a cualquiera de los elementos en la lista? Probé el código pero parece que el convertidor solo se usa para el elemento seleccionado. – tabina

+0

@tabina: Funciona con un simple 'ComboBox' como el de mi ejemplo. Tal vez usted tiene un 'ComboBox' más complejo? Aquí está la respuesta a una pregunta que parece ser lo contrario de su problema: http://stackoverflow.com/a/8247049/98607 –

Cuestiones relacionadas