Inotifypropertychanged propertychanged, где это событие задается? - C#
Формулировка задачи:
почти во всех примерах показано так;
либо так, чтобы не делать лишнии присваивания и проверки
но явно нигде событие PropertyChanged не регистрируется какому нибуть обработчику(методу), получается компилятор сам это делает ?
Листинг программы
- class Model:INotifyPropertyChanged {
- public event PropertyChangedEventHandler PropertyChanged;
- protected void NotifyPropertyChanged(string name) {
- var propertyChanged = PropertyChanged;
- if (propertyChanged != null)
- PropertyChanged(this, new PropertyChangedEventArgs(name));
- }
- public string Name {
- get { return name; }
- set {
- name = value;
- NotifyPropertyChanged("Name");
- }
- }
- }
Листинг программы
- class Model:INotifyPropertyChanged {
- public event PropertyChangedEventHandler PropertyChanged = (o, e) => { };
- protected void NotifyPropertyChanged(string name) {
- PropertyChanged(this, new PropertyChangedEventArgs(name));
- }
- public string Name {
- get { return name; }
- set {
- name = value;
- NotifyPropertyChanged("Name");
- }
- }
- }
Решение задачи: «Inotifypropertychanged propertychanged, где это событие задается?»
textual
Листинг программы
- using System;
- using System.ComponentModel;
- using System.Windows.Forms;
- namespace WindowsFormsApplication299
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- var dummyObject = new DummyClass();
- new MyLabel(dummyObject){Parent = this};
- }
- }
- public class MyLabel : Label
- {
- private object source;
- public MyLabel(object source)
- {
- this.source = source;
- //если объект поддерживает INotifyPropertyChanged, то подписываемся на событие
- if(source is INotifyPropertyChanged)
- (source as INotifyPropertyChanged).PropertyChanged += MyLabel_PropertyChanged;
- }
- void MyLabel_PropertyChanged(object sender, PropertyChangedEventArgs e)
- {
- //получаем измененное свойство
- Text = source.GetType().GetProperty(e.PropertyName).GetValue(source, null).ToString();
- }
- }
- class DummyClass : INotifyPropertyChanged
- {
- public event PropertyChangedEventHandler PropertyChanged = delegate { };
- private string name;
- public string Name
- {
- get { return name; }
- set
- {
- name = value;
- NotifyPropertyChanged("Name");
- }
- }
- public DummyClass()
- {
- //свойство Name периодически получает новое значение
- Application.Idle += delegate { Name = DateTime.Now.ToLongTimeString(); };
- }
- protected void NotifyPropertyChanged(string name)
- {
- PropertyChanged(this, new PropertyChangedEventArgs(name));
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д