j'ai une combobox qui est liée à une colonne datatable comme celle-ci:
ComboBox.DataContext = DataDataTable;
ComboBox.DisplayMemberPath = DataDataTable.Columns["IDNr"].ToString();
L'IDNr dans la colonne commence toujours par 4 lettres suivies du numéro d'identification (ex. BLXF1234). J'ai besoin d'afficher les éléments dans la combobox sans les lettres (j'ai besoin de 1234 pour être affiché dans la combobox).
J'ai donc écrit un convertisseur:
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();
}
Non, comment puis-je dire à la zone de liste déroulante d'utiliser le convertisseur pour afficher les éléments? j'ai essayé ceci dans le Xaml:
ItemsSource="{Binding}"
DisplayMemberPath="{Binding Converter={StaticResource IDPrefixValueConverter}}"
Mais ça ne marche toujours pas ... des idées? Merci
Vous pouvez modifier le ItemTemplate
du ComboBox
et utiliser votre convertisseur:
<ComboBox ItemsSource="{Binding}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource IDPrefixValueConverter}}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Chaque élément est lié aux éléments de ItemsSource
. En utilisant le convertisseur dans la liaison, vous pouvez effectuer la conversion souhaitée.