标题几乎说明了一切。分数显示为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));
}
}
}
答案 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