2014-05-09 1 views
1

Comment puis-je convertir des valeurs de chaîne en entiers et en retour en utilisant IValueConverter?Convertir string en int en utilisant IValueConverter

  • J'ai une base de données constituée de deux tables; table CompanyX et table depty.
  • La table CompanyX a l'ID de champ (int), le prénom, le nom de famille, l'email, le téléphone.
  • La table DeptY a un champ pID (int), Rôles.
  • DeptY pID est la clé étrangère à l'ID CompanyX. Chaque fois que je sélectionne quelqu'un dans le Combobox, je veux qu'il affiche comme leur ID dans un DataGrid.

Ceci est mon ItemTemplate ci-dessous:

<Application.Resources> 
    <DataTemplate x:Key="myTemplate"> 
     <WrapPanel HorizontalAlignment="Stretch"> 
      <TextBlock Text="{Binding FirstName}"/> 
      <Label /> 
      <TextBlock Text="{Binding LastName}"/> 
     </WrapPanel> 
    </DataTemplate> 
</Application.Resources> 

Ceci est mon Combobox qui est lié à la ItemTemplate:

<ComboBox Height="23" HorizontalAlignment="Right" Margin="0,90,267,0" 
      Name="comboID" ItemsSource="{Binding}" VerticalAlignment="Top" 
      Width="208" ItemTemplate="{StaticResource myTemplate}" /> 

Et DataGrid qui affiche:

<DataGridTemplateColumn x:Name="pIDColumn" Header="Person ID" Width="auto"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Path=pID, Converter= {StaticResource myConverter}}"/> 
     <DataTemplate> 
    </DataGridTemplateColumn.CellTemplate>        
</DataGridTemplateColumn> 
<DataGridTemplateColumn x:Name="rolesColumn" Header="Roles" Width="auto" > 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Path=Roles}"/> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

IValueConverter qui ne convertit pas !!

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    string a = (string)value; 
    int b; 
    int.TryParse(a, out b); 
    return b; 
} 
public object ConvertBack(object value, Type targetTypes, object parameter, System.Globalization.CultureInfo culture) 
{ 
    throw new NotImplementedException(); 
} 
+0

Est-ce que votre méthode Convert est invoquée (définir un point d'arrêt)? – Dunken

Répondre

1

Vous convertissez le mauvais sens. Convert() prend la source de liaison comme entrée (int dans votre cas), et affiche ce que le xaml attend (string).

Mais vous n'avez même pas besoin d'un convertisseur. Vous pouvez lier directement à un int et WPF appellera automatiquement ToString() dessus pour l'afficher comme texte.

+0

Comment feriez-vous cela? – AndyRoxxx

+0

Je ne veux pas l'afficher en tant que texte. Je veux afficher dans le DataGrid l'ID de la personne que je sélectionne dans la comboBox, par exemple. quand je clique sur le bouton ajouter, il devrait afficher l'ID des personnes. – AndyRoxxx

+0

@Andy Que voulez-vous afficher comme alors? les seules autres options sont soit l'image (dessin) ou les signaux de fumée. – XAMlMAX

Questions connexes