Отказ от ответственности. Здесь много вопросов о событии PropertyChanged, которое всегда равно null, и я прочитал большинство из них. Но я отправляю еще один (и, вероятно, отличный от других).PropertyChanged всегда имеет значение null на wp7.1, но отлично работает на wp8
Я создал очень простое приложение для привязки данных. Он работает просто отлично на 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, но PropertyChanged всегда имеет значение null для Windows Phone 7.1 (устройство и эмулятор).
Конструктор MainPage не настроил PropertyChanged (он уже null после первого назначения - DataConext = ...).
Заранее благодарим за любые советы.
Спасибо, это так просто, но не очевидно для человека, который только начинается с C# после C++. – Mar