2013-10-19 77 views
5

我使用.net 3.5的WinForms,數據綁定雙向數據綁定在的WinForms,INotifyPropertyChanged的基類中實現

我已經派生類的基類實現IPropertychanged

public event PropertyChangedEventHandler PropertyChanged; 

    private void RaisePropertyChanged(string propertyName) { 
     var handler = this.PropertyChanged; 
     if (handler != null) { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

每個propertysetter電話:

protected void SetField<T>(ref T field, T value, string propertyName) { 
     if (!EqualityComparer<T>.Default.Equals(field, value)) { 
      field = value; 
      IsDirty = true; 
      this.RaisePropertyChanged(propertyName); 
     } 
    } 

典型Propertysetter:

public String LocalizationItemId { 
     get { 
      return _localizationItemId; 
     } 
     set { 
      SetField(ref _localizationItemId, value, "LocalizationItemId"); 
     } 
    } 

一個屬性綁定到一個文本框

 private DerivedEntity derivedEntity 
     TextBoxDerivedEntity.DataBindings.Add("Text", derivedEntity, "Probenname"); 

如果我以編程方式將文本分配到文本框的方式,文本框不顯示它。但我可以手動編輯文本框。

+0

的WinForms數據綁定,我從來沒有聽說過,但肯定即時通訊初學者:) – Krekkon

回答

8

綁定源更新的TextBox驗證事件。 TextBox驗證事件在用戶編輯TextBox時調用,然後將焦點更改爲其他控件。 既然你改變文本框的文本編程的TextBox不知道該文本被改變,因此確認不叫,不更新綁定,所以你需要手動更新綁定。

初始化結合:

var entity; 
textBox.DataBindings.Add("textBoxProperty", entity, "entityProperty"); 

變化TextBox.Text:手動

textBox.Text = "SOME_VALUE"; 

更新綁定:

textBox.DataBindings["textBoxProperty"].WriteValue(); 

Binding.WriteValue()從控制和更新實體相應地讀出值。 您可以在MSDN閱讀關於WriteValue的信息。

7

我知道這是來不及回答,但是這個問題是可以解決的,如果你設置的事件時,你的綁定應該改變的值,如果你把它放在屬性值更改事件您的問題將得到解決。您可以這樣做

textBox.DataBindings.Add("textBoxProperty", entity, "entityProperty", true, DataSourceUpdateMode.OnPropertyChanged); 
+0

u能張貼文本框雙向數據綁定一個小型的工作代碼。只是看着你的小代碼無法想象如何實現它? – Mou

+0

請參閱此問題http://stackoverflow.com/questions/1616003/data-binding-for-textbox。 –

+0

感謝reply.how可我結合等複選框,單選按鈕和下拉等其他控制我想結合的方式作爲當數據將在數據源再變應在控制水平反映變化的結果,這些控制。你可以幫助我的示例代碼,如如何綁定這些控件與數據複選框,單選按鈕和下拉等' – Mou

1

用戶未初始化。即

private DerivedEntity derivedEntity 
TextBoxDerivedEntity.DataBindings.Add("Text", derivedEntity, "Probenname"); 

derivedEntity爲空。

初始化它,你會沒事的。

相關問題