2008-11-26 5 views
1

Я написал элемент управления на C#, который происходит из System.Windows.Forms.Control. Я добавил свойство Selected, к которому я хочу привязать данные к бизнес-объекту, используя BindingSource..NET Databinding игнорирует изменение свойства

Я реализовал шаблон PropertyNameChanged, добавив событие SelectedChanged, которое я запускаю, когда свойство Selected изменено.

Это мой код:

public partial class RateControl : Control 
{ 
    [Category("Property Changed")] 
    public event EventHandler SelectedChanged; 

    public int Selected 
    { 
     get 
     { return m_selected; } 
     set 
     { 
     if (m_selected != value) 
     { 
      m_selected = value; 
      OnSelectedChanged(); 
      Invalidate(); 
     } 
     } 
    } 

    protected virtual void OnSelectedChanged() 
    { 
     if (this.SelectedChanged != null) 
     this.SelectedChanged(this, new EventArgs()); 
    } 
} 

Когда я связываю к выбранному свойству, я вижу это событие будучи subscibed к. Событие также запускается при изменении свойства.

Однако хозяйствующий субъект не обновляется. Я даже не вижу доступ к получателю свойства Selected.

Что мне не хватает?

ответ

1

У вас установлен режим обновления привязки к DataSourceUpdateMode.OnPropertyChanged? Либо через binding.DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged;, либо используя одну из перегрузок DataBindings.Add(...).

Следующие работы для меня, чтобы передать значения в бизнес-объект ...

using System; 
using System.Diagnostics; 
using System.Windows.Forms; 

class MyForm : Form 
{ 
    public MyForm() 
    { 
     MyBusinessObject obj = new MyBusinessObject(); 
     Button btn = new Button(); 
     btn.Click += delegate { Foo++; }; 
     DataBindings.Add("Foo", obj, "Bar", false, DataSourceUpdateMode.OnPropertyChanged); 
     DataBindings.Add("Text", obj, "Bar"); 
     Controls.Add(btn); 
    } 

    private int foo; 
    public event EventHandler FooChanged; 
    public int Foo 
    { 
     get { return foo; } 
     set 
     { 
      if (foo != value) 
      { 
       foo = value; 
       Debug.WriteLine("Foo changed to " + foo); 
       if (FooChanged != null) FooChanged(this, EventArgs.Empty); 
      } 
     } 
    } 
} 

class MyBusinessObject 
{ 
    private int bar; 
    public event EventHandler BarChanged; 
    public int Bar 
    { 
     get { return bar; } 
     set 
     { 
      if (bar != value) 
      { 
       bar = value; 
       Debug.WriteLine("Bar changed to " + bar); 
       if (BarChanged != null) BarChanged(this, EventArgs.Empty); 
      } 
     } 
    } 
} 

static class Program 
{ 
    [STAThread] 
    static void Main() 
    { 
     Application.Run(new MyForm()); 
    } 
} 
Смежные вопросы