Inotifypropertychanged propertychanged, где это событие задается? - C#

Узнай цену своей работы

Формулировка задачи:

почти во всех примерах показано так;
Листинг программы
  1. class Model:INotifyPropertyChanged {
  2. public event PropertyChangedEventHandler PropertyChanged;
  3. protected void NotifyPropertyChanged(string name) {
  4. var propertyChanged = PropertyChanged;
  5. if (propertyChanged != null)
  6. PropertyChanged(this, new PropertyChangedEventArgs(name));
  7. }
  8. public string Name {
  9. get { return name; }
  10. set {
  11. name = value;
  12. NotifyPropertyChanged("Name");
  13. }
  14. }
  15. }
либо так, чтобы не делать лишнии присваивания и проверки
Листинг программы
  1. class Model:INotifyPropertyChanged {
  2. public event PropertyChangedEventHandler PropertyChanged = (o, e) => { };
  3. protected void NotifyPropertyChanged(string name) {
  4. PropertyChanged(this, new PropertyChangedEventArgs(name));
  5. }
  6. public string Name {
  7. get { return name; }
  8. set {
  9. name = value;
  10. NotifyPropertyChanged("Name");
  11. }
  12. }
  13. }
но явно нигде событие PropertyChanged не регистрируется какому нибуть обработчику(методу), получается компилятор сам это делает ?

Решение задачи: «Inotifypropertychanged propertychanged, где это событие задается?»

textual
Листинг программы
  1. using System;
  2. using System.ComponentModel;
  3. using System.Windows.Forms;
  4.  
  5. namespace WindowsFormsApplication299
  6. {
  7.     public partial class Form1 : Form
  8.     {
  9.         public Form1()
  10.         {
  11.             InitializeComponent();
  12.  
  13.             var dummyObject = new DummyClass();
  14.  
  15.             new MyLabel(dummyObject){Parent = this};
  16.         }
  17.     }
  18.  
  19.     public class MyLabel : Label
  20.     {
  21.         private object source;
  22.  
  23.         public MyLabel(object source)
  24.         {
  25.             this.source = source;
  26.             //если объект поддерживает INotifyPropertyChanged, то подписываемся на событие
  27.             if(source is INotifyPropertyChanged)
  28.                 (source as INotifyPropertyChanged).PropertyChanged += MyLabel_PropertyChanged;
  29.         }
  30.  
  31.         void MyLabel_PropertyChanged(object sender, PropertyChangedEventArgs e)
  32.         {
  33.             //получаем измененное свойство
  34.             Text = source.GetType().GetProperty(e.PropertyName).GetValue(source, null).ToString();
  35.         }
  36.     }
  37.  
  38.     class DummyClass : INotifyPropertyChanged
  39.     {
  40.         public event PropertyChangedEventHandler PropertyChanged = delegate { };
  41.  
  42.         private string name;
  43.  
  44.         public string Name
  45.         {
  46.             get { return name; }
  47.             set
  48.             {
  49.                 name = value;
  50.                 NotifyPropertyChanged("Name");
  51.             }
  52.         }
  53.  
  54.         public DummyClass()
  55.         {
  56.             //свойство Name периодически получает новое значение
  57.             Application.Idle += delegate { Name = DateTime.Now.ToLongTimeString(); };
  58.         }
  59.  
  60.         protected void NotifyPropertyChanged(string name)
  61.         {
  62.             PropertyChanged(this, new PropertyChangedEventArgs(name));
  63.         }
  64.     }
  65. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.636 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы