Windows 8 App Textbox数据绑定无法正常工作

时间:2012-10-17 22:21:23

标签: c# xaml windows-8

标题几乎说明了一切。分数显示为0(这是我将其初始化为)。但是,更新分数时,它不会传播到UI textBlock。认为这很简单,但我总是遇到从Android转换的问题:)我想在UI线程上运行一些东西吗?

我正在尝试绑定“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;
    }

**注意:确保你不要忘记添加{get;设置;}否则什么都不会出现。

这就是我要设置它的地方

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

    text_Score.DataContext = info;
}

P.S。重申一下,我要去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));
        }
    }
}

1 个答案:

答案 0 :(得分: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