免责声明:这里有很多关于PropertyChanged事件的问题,它始终为null,我已经阅读了大部分内容。但我发布了另一个(可能与其他人不同)。
我创建了一个非常简单的数据绑定应用程序。 Windows Phone 8上的工作正常,但在Windows Phone 7.1上根本不起作用,因为在WP7.1上,PropertyChanged始终为null。
这是我的代码(我试图尽可能简单地说明问题)。
的Xaml:
<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始终为null。
MainPage构造函数未设置PropertyChanged(首次赋值后它已经为null - DataConext = ...)。
提前感谢您的任何建议。
答案 0 :(得分:0)
首先,要明确这个问题:你说它不起作用,因为PropertyChanged为null。那是错的。您必须以另一种方式查看问题:PropertyChanged为null 因为它不起作用。
至于知道为什么不起作用,只是因为你没有将你的BindingTest
课程标记为公开。更改类声明如下,它应该工作:
public class BindingTest : INotifyPropertyChanged