2009-07-09 6 views
6

ich meine TextBox auf einen String-Wert überC#/WPF Anzeige Spezielle Strings (zB ersetzen "0" mit String.Empty)

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

gebunden habe Wie kann ich String.Empty oder "" für die Anzeige String "0", und alle anderen Strings mit ihrem ursprünglichen Wert?

Danke für jede Hilfe!

Prost

PS: Eine Möglichkeit, ein benutzerdefiniertes Viewmodel für die Zeichenfolge wäre .. aber ich würde es vorziehen, es irgendwie in der XAML direkt zu tun, wenn es möglich ist.

Antwort

7

Ich denke, der einzige Weg neben der Verwendung des ViewModel ist die Erstellung eines benutzerdefinierten ValueConverter.

Also im Grunde haben Sie folgende Möglichkeiten:

Ansichtsmodell:

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

ich mit dem benutzerdefinierten Valueconverter –

+0

Vielen Dank gehen würde! ValueConverter ist genau das, was ich gesucht habe. Prost –

+0

Ich auch :) Seine sauberer;) – Arcturus

4

Da die Alte Eigenschaft hier offensichtlich eine Zahl ist, ein anderer Weg wäre, um zu gehen exponieren Sie das Alter als int und verwenden Sie das StringFormat Attribut des Binding:

+0

Sie waren schneller :) Ich kann hier das Problem sehen, dass, wenn ein Benutzer den Wert string.empty eingibt, meine anderen Klassen eine "0" für das benötigen oder sie abstürzen werden, also denke ich, dass der beste Weg zu gehen ist Wertkonverter. Prost –