2009-03-03 30 views
7

Arama metin kutusu olan bir Özel Denetim (Windows Form) var. Denetimdeki bir özellik, "Tanımlayıcı", "Kod" ve "Açıklama" içeren bir Özel Nesne olan Mevcut Seçimdir. Bu özellik bir BindingSource kullanarak Databound.Özel Denetime Veri Bağlama

Bilginin görüntülenmesi harika çalışıyor. Diğer taraftan OnValidate veya OnValueChange'a Güncelleme ayarlamamı bağımsız olarak BindingSource'ı hiçbir zaman günceller. Bunu otomatik güncellemeye almak için kaçırdığım bir şey var mı? bilgilerin görüntülenmesi

private System.Windows.Forms.BindingSource buildPlanComponentDataBindingSource; 

    public void LoadBuildPlan(string itemNumber) 
    { 
     var buildPlanComponents = BuildPlan.LoadBuildPlanComponents(itemNumber, AutomaticPrice); 
     buildPlanComponentDataBindingSource.DataSource = buildPlanComponents; 
     AssemblyNumber = itemNumber; 
    } 




[Bindable(true)] 
[DefaultValue(null)] 
public ILookupSelection CurrentSelection 
{ 
    get 
    { 
     if (currentSelection == null) 
      currentSelection = new LookupSelection {Code = txtLookup.Text}; 

     return currentSelection; 
    } 

    set 
    { 
     if (value == null) return; 

     currentSelection = value; 

     SetText(currentSelection, DisplayText); 
     SetDescription(currentSelection, DisplayDescription); 
    } 
} 
+0

Bize veri bağlama oluşturduğunuz kodu gösterebilir misiniz? – overslacked

+0

Teşekkürler, sorunuz çok yardımcı oldu. Bazı nedenlerden dolayı, MSDN öğreticisi, öğreticisinden [Bindable (true)] özniteliğini dışarıda bıraktı. Bu önemli bir detay! –

cevap

2

Uygulamanın INotifyPropertyChanged çözümü gibi görünüyor!

#region IPropertyChanged 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); 
    } 

    protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) 
    { 
     if (null != PropertyChanged) 
     { 
      PropertyChanged(this, e); 
     } 
    } 

    #endregion 
+0

IPropertyChanged, INotifyPropertyChanged öğesinde okumalıdır. Kodu kopyaladım ve kalıtımı tanımlarken bu ayrıntıdan kandırdım. Aksi halde bu harika, +1 – Marcel

0

harika çalışır. Diğer taraftan, veya OnValueChange OnValidate Güncelleştirmesini ayarladığımdan 'dan bağımsız olarak BindingSource'ı güncelleştirmez.

Kodunuza bakarak aslında bundan emin değilim. Setinizde, boş ve terk için test ediyorsunuz; Veriler gerçekten null içeriyorsa (açıkladığınız şey budur) kontrolünüz senkronize edilmeyecektir. Belki de bu kontrol altta yatan problemi maskelemekte midir?

+0

Gerçekten NULL olan tek zaman, denetimin ilk olarak oluşturulduğu zamandır. Aksi takdirde bu sadece bir değer içeren bir Seçim yapıldığında ayarlanır. – ejmack

+0

Bu durumda, test etmek için değer == null dışında bir farklı bayrak kullanmanızı öneririm. Özelliklere veri aktarımı, ileri ve geri bir süreçtir ... her halükarda, bunu temizlerdim, ama aynı zamanda olumlu değil, sonunda probleminize yardımcı olur. – overslacked

0

Belki DataBinding değeri bu şekilde ayarlarken her denetim için değerini yazmak için neden gerekir?

txtMySetValue adlı bir metin kutusu için bağlayıcı bir veri varsayarak:

txtMySetValue.DataBindings [0] .WriteValue();