免责声明:这里有很多关于 PropertyChanged 事件的问题,这些问题总是空的,我已经阅读了其中的大部分。但我正在发布另一个(可能与其他人不同)。
我创建了一个非常简单的数据绑定应用程序。它在 Windows Phone 8 上运行良好,但在 Windows Phone 7.1 上根本不起作用,因为在 WP7.1 上 PropertyChanged 始终为空。
这是我的代码(我试图使其尽可能简单来说明问题)。
xml:
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBox x:Name="txtTest" Text="{Binding Text}"></TextBox>
</Grid>
主页类:
public partial class MainPage : PhoneApplicationPage
{
// Constructor
public MainPage()
{
InitializeComponent();
DataContext = new BindingTest();
}
}
最后,数据上下文类:
class BindingTest : INotifyPropertyChanged
{
private string _strTest = "Hello";
public string Text
{
get { return _strTest; }
set
{
if (_strTest != value)
{
_strTest = value;
RaisePropertyChanged("Text");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(name));
}
}
如您所见,我没有忘记设置数据上下文,实现 INotifyPropertyChanged 接口,并调用 RaisePropertyChanged()。
正如我上面提到的,该代码适用于 Windows Phone 8 模拟器,但对于 Windows Phone 7.1(设备和模拟器),PropertyChanged 始终为空。
MainPage 构造函数没有设置 PropertyChanged(第一次赋值后它已经为空 - DataConext = ...)。
提前感谢您的任何建议。