2012-03-31 11 views
0

Ich möchte die Benutzer Punktzahl an ein Textfeld in der Windows Phone App in Silverlight binden. hier ist das Skelett meines Spiels KlasseDataBinding TextBox mit einem Integer Wert WP7

public class Game : INotifyPropertyChanged 
{ 
    private int _userScore; 
    public string UserScore { 
     { 
      return _userScore.ToString(); 
     } 
     set 
     { 
      _userScore = Convert.ToInt32(value); 
      NotifyPropertyChanged("UserScore"); 
     } 
    } 
public Game() 
    { 
     UserScore = "0"; 
    } 
public event PropertyChangedEventHandler PropertyChanged; 

    void NotifyPropertyChanged(string propertyName) 
    { 
     if (this.PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

In meiner XAML Ich habe

<TextBlock Margin="28,74,242,386" Name="scoreTextBlock" 
Text="SCORE" DataContext="{Binding UserScore}" /> 

und in den MainPage.xaml.cs

public MainPage() 
    { 
     InitializeComponent(); 
     Game theGame = new Game(); 
     DataContext = theGame; 
    } 

Die Frage

Wenn ich die App starte, wird das Ergebnis korrekt geändert, aber es wird nicht in th angezeigt e scoreTextBlock. Gibt es etwas, was ich falsch mache?

Antwort

4

Sie müssen nicht an eine string binden. Sie können direkt auf eine ganze Zahl binden:

private int _userScore; 
public int UserScore 
{ 
    { 
     return _userScore; 
    } 
    set 
    { 
     _userScore = value; 
     NotifyPropertyChanged("UserScore"); 
    } 
} 

Und Sie würden einfach es wie folgt festgelegt:

public Game() 
{ 
    UserScore = 0; 
} 

Dann ändern Sie Ihre TextBlock zu:

<TextBlock Margin="28,74,242,386" Name="scoreTextBlock" Text="{Binding UserScore}" /> 

Sie die festgelegt haben DataContext in der Ansicht, müssen Sie es nicht noch einmal tun. Wenn Sie das Wort "Score" anzeigen möchten, müssen Sie eine zweite TextBlock verwenden.

Diese sollte funktionieren.

+0

Das funktioniert auch nicht. Ich denke, ich könnte einen Schritt vermissen. – nikhil

+0

@nikhil - Hmm - Sie haben 'INotifyPropertyChanged' implementiert und den' DataContext' gesetzt - zwei der häufigsten Fehler. Weitere Informationen zu Datenbindungen finden Sie unter http://msdn.microsoft.com/en-us/library/cc278072(v=vs.95).aspx. – ChrisF

+0

Der darin enthaltene Text bleibt nur SCORE, es wird dort nicht angezeigt. – nikhil

2

Ich glaube, Sie auf dieser Linie zu binden versuchen:

<TextBlock Margin="28,74,242,386" Name="scoreTextBlock" Text="SCORE" DataContext="{Binding UserScore}"/> 

aber das ist falsch. Die DataContext-Eigenschaft sollte die Instanz der Spielklasse und die Texteigenschaft die Punktzahl sein. Etwas wie folgt aus:

<StackPanel Orientation="Horizontal"> 
    <TextBlock Text="SCORE:"/> 
    <TextBlock Text="{Binding UserScore}"/> 
</StackPanel> 

Dieser Code muss noch eine Datacontext, aber ich bin nicht sicher, wie Sie instanziieren und die Instanz lokalisiert, so dass ich lehnte es kein Beispiel-Code hinzufügen. Behalten Sie auch @ ChrisF's Kommentare im Hinterkopf.