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)); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д