2009-07-09 5 views
6

Je suis lié à mon TextBox une valeur de chaîne viaC#/WPF afficher des chaînes personnalisées (par exemple, remplacer « 0 » avec String.Empty)

Text="{Binding AgeText, Mode=TwoWay}" 

Comment puis-je afficher String.Empty ou « » pour la chaîne "0", et toutes les autres chaînes avec leur valeur d'origine?

Merci pour toute aide!

Vive

PS: Une façon serait ViewModel personnalisée pour la chaîne .. mais je préférerais le faire en quelque sorte dans le XAML directement, si elle est possible.

Répondre

7

Je pense que la seule façon d'utiliser ViewModel est de créer un ValueConverter personnalisé.

Donc, fondamentalement, vos choix sont:

ViewModel:

private string ageText; 
public string AgeText{ 
    get{ 
     if(ageText.equals("0")) 
      return string.empty; 

     return ageText; 
    } 
    ... 
} 

ValueConverter:

public class AgeTextConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value.Equals("0")) 
      return string.Empty; 

     return value; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 

    } 
} 
+2

je partirais avec la coutume ValueConverter –

+0

Merci beaucoup! ValueConverter est exactement ce que je cherchais. Cheers –

+0

Moi aussi :) Son nettoyeur;) – Arcturus

4

Depuis la propriété Age est évidemment un certain nombre ici, une autre façon d'aller serait exposer l'Age comme un int et utiliser l'attribut StringFormat du Binding:

Text="{Binding Age, Mode=TwoWay, StringFormat='{}{0:#}'}" 
+0

Vous étiez plus rapide :) Je peux voir ici le problème que si un utilisateur entre dans la chaîne de valeur.empty, mes autres classes auraient besoin d'un "0" pour cela ou ils vont planter, donc je suppose que la meilleure voie à suivre est la ValueConverter. À la votre –

Questions connexes