2008-11-26 9 views
1

J'ai écrit un contrôle en C# qui dérive de System.Windows.Forms.Control. J'ai ajouté une propriété Selected à laquelle je veux renvoyer des données à une entité commerciale en utilisant une BindingSource.Databinding .NET ignore la propriété changement

J'ai implémenté le modèle PropertyNameChanged en ajoutant un événement SelectedChanged que je déclenche lorsque la propriété Selected est modifiée.

Ceci est mon code:

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()); 
    } 
} 

Quand je lie à la propriété choisie, je vois l'événement étant subscibed à. L'événement est également déclenché lorsque la propriété change.

Cependant, l'entité commerciale est pas mis à jour. Je ne vois même pas le getter de la propriété Selected en cours d'accès.

Qu'est-ce qui me manque?

Répondre

1

Le mode de mise à jour de la liaison est-il défini sur DataSourceUpdateMode.OnPropertyChanged? Soit par l'intermédiaire d'binding.DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged;, ou avec l'une des DataBindings.Add(...) surcharges.

Les œuvres suivantes pour moi de pousser les valeurs de l'objet métier ...

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()); 
    } 
} 
Questions connexes