DataBinding TextBox,具有整数值WP7

时间:2012-03-31 21:21:08

标签: c# windows-phone-7 data-binding

我想将用户分数绑定到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内。 有什么东西我做错了吗?

2 个答案:

答案 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的评论。