Для object => управляющих обновлений: ваше событие не будет возбуждено - автоматически реализованные свойства не заботятся о INotifyPropertyChanged
- вам нужно его убрать:
public class Data : INotifyPropertyChanged {
int _value = 10;
public int Value {
get {return _value;}
set {
if(value != _value) {
_value = value;
OnPropertyChanged("Value");
}
}
}
protected virtual void OnPropertyChanged(string propertyName) {
var handler = PropertyChanged;
if(handler != null) {
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
Но для другого (control => object) я полагаю, что вы не правильно настроили привязку. Вам следует связать свойство Data.Value
, и вам нужно будет рассказать ему о своем экземпляре Data
во время выполнения:
someBindingSource.DataSource = data;
Или, если вы используете DataBindings
напрямую - это показывает, что он работает с указанным выше типом:
static class Program {
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Data data = new Data();
data.PropertyChanged += delegate {
Debug.WriteLine("Value changed: " + data.Value);
};
Button btn;
NumericUpDown nud;
Form form = new Form {
Controls = {
(nud = new NumericUpDown()),
(btn = new Button {
Text = "Obj->Control",
Dock = DockStyle.Bottom })
}
};
nud.DataBindings.Add("Value", data, "Value",
false, DataSourceUpdateMode.OnPropertyChanged);
btn.Click += delegate { data.Value++; };
Application.Run(form);
}
}