2012-03-31 3 views
0

私は銀色のWindows phone appのテキストボックスにユーザースコアをバインドしたいと思っています。ここで私が質問データバインディング整数値のテキストボックスWP7

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

とMainPage.xaml.csに

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

を持っている私のゲームクラスのスケルトン私のXAMLで

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)); 
     } 
    } 
} 

です私は、アプリケーションを実行すると、スコアが正しく変更されますが、それはthの内側に表示されませんe scoreTextBlock。 私が間違っていることがありますか?

答えて

4

stringにバインドする必要はありません。あなたは、整数に直接結合することができます。

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

そして、あなたは、単にこのようにそれを設定したい:あなたが設定した

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

public Game() 
{ 
    UserScore = 0; 
} 

は、その後、あなたのTextBlockに変更しますビューにDataContextがある場合は、再度実行する必要はありません。 「スコア」という単語を表示したい場合は、2番目の単語「TextBlock」を使用する必要があります。

このである必要があります。

+0

これも機能しません。 私はいくつかのステップを逃しているかもしれないと思う。 – nikhil

+0

@nikhil - うーん、あなたは 'INotifyPropertyChanged'を実装し、最も一般的な間違いの2つの' DataContext'を設定しました。データバインディングの詳細については、http://msdn.microsoft.com/en-us/library/cc278072(v=vs.95).aspxを参照してください。 – ChrisF

+0

そこにあるテキストはSCOREだけ残っていますが、そこにはハッシュは表示されません。 – nikhil

2

私はあなたがこの行にバインドしようとしていると思う:

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

それがあるが正しくありません。 DataContextプロパティはゲームクラスのインスタンスであり、Textプロパティはスコアでなければなりません。このような何か:

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

このコードはまだのDataContextが必要ですが、私はあなたがインスタンス化し、インスタンスを見つけているかわからないので、私はそれのために任意のコード例を追加して減少しました。 @ ChrisFのコメントも念頭に置いてください。

関連する問題