2016-04-16 3 views
0

Я хотел бы связать метку к свойству класса и попытался это:привязки метки к свойству

public class Test 
{ 
    public string Name { get; set; } 
} 

Test test = new Test() { Name = "abc" }; 
label.DataBindings.Add ("Text", test, "Name"); 

Это показывает «ABC» на этикетке. Если я изменил свойство Name после привязки данных, метка не отражает новое значение. Что не так?

+1

Ваш класс должен реализовать интерфейс INotifyPropertyChanged. – LarsTech

+0

[Проверить страницу MSDN] (https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged (v = vs.110) .aspx) на интерфейсе INotifyPropertyChanged – Steve

ответ

0

Я предлагаю вам использовать привязку другим способом.

label.DataBindings.Add(new Binding("Text", test, "Name", false, DataSourceUpdateMode.OnPropertyChanged)); 

Я надеюсь, что это сработает для вас!

Другой способ обновить свой класс, чтобы использовать измененное значение событий,

class Test 
{ 
    private string name; 

    public string Name 
    { 
     get { return name; } 
     set 
     { 
      //Check if you are assigning the same value 
      if (Equals(name, value)) 
       return; 
      name = value; 
      OnNameChanged(); 
     } 

     public event EventHandler NameChanged; 

     protected virtual void OnNameChanged() 
     { 
      var handler = NameChanged; 
      if (handler != null) 
       handler(this, EventArgs.Empty); 
     } 
    } 
} 

В случае, первый один не работает.

Лучшее решение сделать это общий способ,

class Test : INotifyPropertyChanged 
{ 
    private string name = ""; 

    public string Name 
    { 
     get { return name; } 
     set { name = value; NotifyPropertyChanged(); } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void NotifyPropertyChanged() 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs("Name")); 
     } 
    } 
} 
+0

попробуйте использовать событие с измененной стоимостью в вашей собственности, как я уже упоминал в моем редактировании. – thisisbobbs

+0

Первое решение не работает ни (я уже пробовал). Второй может работать, но это намного больше кода, чем я хотел бы написать для такой маленькой проблемы ;-) –

+0

Второе решение работает (помимо небольшой синтаксической ошибки, которую вы имели), но я все еще надеюсь, что есть более элегантный решение там. –

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