我想将用户分数绑定到silverlight中Windows phone应用程序的文本框中。这是我的游戏类的骨架
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));
}
}
}
在我的XAML中我有
<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;
}
问题
当我运行应用程序时,分数会被正确修改,但不会显示在scoreTextBlock
内。
有什么东西我做错了吗?
答案 0 :(得分:4)
您无需绑定到string
。您可以直接绑定到整数:
private int _userScore;
public int UserScore
{
{
return _userScore;
}
set
{
_userScore = value;
NotifyPropertyChanged("UserScore");
}
}
你只需这样设置:
public Game()
{
UserScore = 0;
}
然后将TextBlock
更改为:
<TextBlock Margin="28,74,242,386" Name="scoreTextBlock" Text="{Binding UserScore}" />
您已在视图上设置DataContext
,您无需再次执行此操作。如果您想显示“得分”一词,则必须使用第二个TextBlock
。
此 应该。
答案 1 :(得分: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的评论。