【问题标题】:Windows Phone App textbox binding don't workWindows Phone App 文本框绑定不起作用
【发布时间】:2012-02-10 12:29:34
【问题描述】:

我正在开发我的第一个 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);
        }
    }
}

【问题讨论】:

  • 您能否也发布 OnNavigatedTo 代码,我曾经遇到过类似的问题,我想现在您也遇到了同样的问题。

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


【解决方案1】:
  1. 当设置了ZodiacString 时,你不会提升PropertyChanged
  2. 你有Mode=OneWay,无论如何这是默认值。你想要Mode=TwoWay

【讨论】:

  • 提高 PropertyChanged 并不能使它起作用。我也使用绑定动态更改按钮的 ImageSource 而不提升它,这很有效。我想要 Mode=OneWay,只从模型到 UI 进行更改
【解决方案2】:

尝试摆脱update(),并摆脱ZodiacString 的setter。

两个原因 - 不需要,以及 在 getter 中,做更新的工作。这也比您当前的实现要好——用作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; }
}

【讨论】:

    猜你喜欢
    • 2014-08-26
    • 2015-08-12
    • 2013-12-05
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多