Почему моя привязка не работает?

#silverlight

#silverlight

Вопрос:

Есть класс за xaml, который содержит свойство ‘Int32 Count’

Я хочу привязать некоторый текстовый блок к значению ‘Count’ — это текстовый блок.Текст будет иметь значение ‘Count’.

Итак, я написал в xaml :

  <TextBlock Text="{ Binding Path=Count }" />
  

И в коде, лежащем в основе xaml, я добавляю в конструктор:

   DataContext = this;
  

Но каждое изменение ‘Count’ не изменяет текст текстового блока.

Код ‘Count’

 Int32 count;
public Int32 Count
{
      get
      {
           return count;
      }

      set
      {
           count = value;
      }

}
  

Комментарии:

1. каков код свойства Count? И вы пытаетесь привязать окно к самому себе?

Ответ №1:

поместите интерфейс INotifyPropertyChanged в свой класс:

 public class MainPage : INotifyPropertyChanged
{

}
  

затем реализуйте:

 public event PropertyChangedEventHandler PropertyChanged;

protected void OnPropertyChanged(string propertyname)
        {
            var handler = PropertyChanged;
            if (handler != null)
                handler(this, new PropertyChangedEventArgs(propertyname));
        }
  

что это дает, если предоставить механизм уведомления представления о том, что что-то изменилось в вашем datacontext, и вы делаете это следующим образом:

 public Int32 Count
{
      get
      {
           return count;
      }

      set
      {
           count = value;
           OnPropertyChanged("Count"); //This invokes the change
      }

}
  

Но, конечно, я рекомендую вам разделить дизайн и код, используя шаблон MVVM. Таким образом, вы можете реализовать свойство, измененное на класс ViewModelBase, а затем наследовать его для каждой из ваших ViewModels.

Ответ №2:

Вы должны убедиться, что ваш DataContext реализует INotifyPropertyChanged . Затем вы должны правильно запускать события изменения свойства.