#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 . Затем вы должны правильно запускать события изменения свойства.