2013-08-27 2 views
0

Отказ от ответственности. Здесь много вопросов о событии 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 = ...).

Заранее благодарим за любые советы.

ответ

0

Во-первых, чтобы все было ясно: вы говорите, что это не работает, потому что PropertyChanged имеет значение null. Это неверно. Вы должны увидеть проблему другим способом: PropertyChanged имеет значение , потому что не работает.

Как узнать, почему это не работает, просто потому, что вы не отметили свой класс BindingTest как общедоступный. Измените декларацию класса следующим образом: она должна работать:

public class BindingTest : INotifyPropertyChanged 
+0

Спасибо, это так просто, но не очевидно для человека, который только начинается с C# после C++. – Mar

 Смежные вопросы

  • Нет связанных вопросов^_^