1

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

我正在尝试绑定到“分数”属性。

<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; set;} 否则什么都不会出现。

这就是我试图设置它的地方

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

    text_Score.DataContext = info;
}

PS重申一下,我要选择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));
        }
    }
}
4

1 回答 1

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

于 2012-10-17T22:38:00.280 回答