Привязка текстового поля приложения Windows Phone не работает - PullRequest
1 голос
/ 15 января 2012

Я работаю над своим первым приложением для Windows Phone 7, и у меня проблема с тем, что привязка к текстовому полю не работает, и я действительно не знаю, почему.Другие привязки работают отлично.

Если дата изменена, текст в текстовом поле также должен быть изменен.

Xaml:

<TextBlock x:Name="ZodiacText" Text="{Binding Path=ZodiacString, Mode=OneWay}" FontSize="20" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Center"  VerticalAlignment="Center" Foreground="White" />

И код позади:

public DateTime Date
{
    get { return date; }
    set
    {
        if (value != this.date)
        {
            this.date = value;
            setActualDate(this.date);

            update();

            if (this.PropertyChanged != null)
            {
                this.PropertyChanged(this,
                new PropertyChangedEventArgs("NewDate"));
            }
        }
    }
}
public void update()
{
    zodiac = MoonCalculus.getZodiac();
   ...
    ZodiacString = zodiac;
}
public String ZodiacString
{
    get { return zodiacString; }
    set
    {
        if (zodiacString != value)
        {
            zodiacString = AppResources.ResourceManager.GetString(value);
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 15 января 2012
  1. Вы не повышаете PropertyChanged, когда установлено ZodiacString
  2. У вас есть Mode=OneWay, что в любом случае является значением по умолчанию.Вы хотите Mode=TwoWay.
1 голос
/ 15 января 2012

Попробуйте избавиться от update() и избавиться от установщика за ZodiacString.

Две причины - это не нужно, и В геттере делай работу по обновлению. Это лучше, чем ваша текущая реализация - значение, используемое в качестве параметра для AppResources.ResourceManager.GetString(value);, является «запахом кода», потому что оно не дает понять, что это истинные намерения. (используя в качестве параметра вместо установки ZodiacString в его значение)

public DateTime Date
{
    get { return date; }
    set
    {
        if (value != this.date)
        {
            this.date = value;
            setActualDate(this.date);
RaisePropertyChanged("Date");
RaisePropertyChanged("NewDate");
RaisePropertyChanged("ZodiacString");

        }
    }
}


private void RaisePropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
            {
                this.PropertyChanged(this,
                new PropertyChangedEventArgs(propertyName));
            }
}

public String ZodiacString
{
    get { 
zodiac = MoonCalculus.getZodiac();
   ...
return zodiac; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...