我正在开发我的第一个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);
}
}
}
答案 0 :(得分:2)
PropertyChanged
时,您未提出ZodiacString
Mode=OneWay
,这是默认的。你想要Mode=TwoWay
。答案 1 :(得分:1)
尝试摆脱update()
,摆脱ZodiacString
的设定者。
有两个原因 - 它不需要,而且
在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; }
}