2012-10-17 25 views
1

標題幾乎說明了一切。分數顯示爲0(這是我初始化它)。但是,更新分數時,它不會傳播到UI textBlock。認爲這將是非常簡單的,但我總是遇到問題,從Android切換:)我想在UI線程上運行的東西?Windows 8應用程序文本框數據綁定不起作用

我試圖綁定到「Score」屬性。

<TextBox x:Name="text_Score" Text="{Binding Score, Mode=OneWay}" HorizontalAlignment="Left" Margin="91,333,0,0" Grid.Row="1" TextWrapping="Wrap" VerticalAlignment="Top" Height="148" Width="155" FontSize="72"/> 

這裏是我的座級

public class GameInfo 
    { 
     public int Score { get; set; } 
     public int counter = 0; 
    } 

**注:請務必不要忘記添加{獲得;設置;}否則什麼都不會顯示出來。

而這正是我試圖把它

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 
    info.counter = (int)e.Parameter; 

    text_Score.DataContext = info; 
} 

附:重申一下,我要去OneWay。我只想顯示分數,並在變量發生變化時使其不顯示。我計劃禁用用戶輸入。

以下是完整的工作代碼示例。唯一需要改變的是我的持有人課程。謝謝沃爾特。

public class GameInfo : INotifyPropertyChanged 
{ 
    private int score; 
    public int Score { 
     get { return score; } 
     set 
     { 
      if (Score == value) return; 
      score = value; 
      NotifyPropertyChanged("Score"); 
     } 
    } 
    public int counter = 0; 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

回答

2

在XAML綁定中,您的底層類需要通知綁定框架該值已更改。我舉個例子,你在OnNavigatedTo事件處理器中設置計數器。但是如果你看看你的GameInfo類,它是一個簡單的數據對象。

INotifyPropertyChanged接口用於通知客戶端(通常是綁定客戶端)屬性值已更改。所以你的情況,如下

public class GameInfo : INotifyPropertyChanged 
{ 
    private int _score; 
public int Score 
{ 
    get 
    { 
    return this._score; 
    } 

    set 
    { 
    if (value != this._score) 
    { 
    this._score = value; 
    NotifyPropertyChanged("Score"); 
    } 
} 

    }  
public int counter = 0; // if you use _score, then you don't need this variable. 
    public event PropertyChangedEventHandler PropertyChanged; 

    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

} 

請參閱MSDN文章瞭解更多信息INotifyPropertyChanged

+0

那麼改變類,我沒有用代碼實現,它得到了反正公佈。我會再添加一些,因爲這些屬性還在調用NotifyPropertyChanged。 –

+0

您還需要在Score setter中致電NotifyPropertyChanged –

+0

感謝Walt。你說的是有道理的。其實我只是四處尋找,正在尋找一個這樣的例子。不過,我不明白_score –

相關問題