DataBinding TextBox с целочисленным значением WP7 - PullRequest
0 голосов
/ 01 апреля 2012

Я хочу привязать оценку пользователя к текстовому полю в приложении Windows Phone в Silverlight. вот скелет моего игрового класса

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 ]

4 голосов
/ 01 апреля 2012

Вам не нужно привязываться к 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.

Этот должен работать.

2 голосов
/ 01 апреля 2012

Я думаю, что вы пытаетесь связать эту строку:

<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>

Этот код все еще нуждается в текстовом коде данных, но я не уверен, как вы создаете экземпляр экземпляра и определяете местонахождение экземпляра, поэтому я отказался добавить любой пример кода для него.Помните также комментарии @ ChrisF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...