2010-08-29 3 views
1

У меня есть текстовое поле, которое Text свойство привязывается как тоTextBox - свойство связывания не обновляется сама

<TextBox Name="txtBox"> 
     <TextBox.Text> 
      <Binding Path="Data"> 

      </Binding> 
     </TextBox.Text> 
    </TextBox> 

Поданные Данные могут быть изменены в различных местах, в моей программе. Однако, если я изменил данные Data в управлении ahother, свойство t txtBox Text не обновится. Я все еще вижу старую ценность (несмотря на то, что данные были изменены). Есть ли способ заставить текстовое поле обновлять его или нет?

ответ

0

Ваш объект объекта Property Data реализует INotifyPropertyChanged? , если это не выполнено, и пожар PropertyChanged Когда ваше свойство set называется

5

Для того, чтобы ваше текстовое поле узнало, когда данные привязаны к изменениям, класс, которому он обязан, должен реализовать INotifyPropertyChanged. Ниже приведен пример в C#. Если вы привязываете текстовое поле к свойству Data, текстовое поле должно обновляться при выполнении сеттера объекта Data. Обратите внимание, что для INotifyPropertyChanged потребуется ссылка на пространство имен System.ComponentModel (использование в C# или импорт в VB).

public class MyData : INotifyPropertyChanged 
{ 
    string _data; 

    public event PropertyChangedEventHandler PropertyChanged; 

    public void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    public string Data 
    { 
     get 
     { 
      return _data; 
     } 

     set 
     { 
      _data = value; 
      this.OnPropertyChanged("Data"); 
     } 
    } 
} 
+0

Спасибо за ответ. Я дам ему шанс :) Однако я хотел бы знать, есть ли способ обновить textbox.text вручную. Sth вроде textbox.refresh() ?? – pelicano

+0

Еще один вопрос. Есть ли способ реализовать этот интерфейс и использовать autoproperty? В основном все свойства моего класса реализованы таким образом public DateTime Date {get; задавать; } – pelicano

+0

Что касается ручного обновления, это зависит от того, хотите ли вы сделать это, обратившись к элементу управления непосредственно из представления или косвенно из режима просмотра. Приведенный мной пример косвенно вызывает привязку к обновлению с помощью viewmodel. Таким образом, это сводится к тому, что вы поднимаете событие OnPropertyChanged. Вы можете поднять мероприятие в любое время, которое вам нужно - оно не обязательно должно быть в сеттере. –

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