2009-10-23 83 views
27

結合我具有存儲型果實的對象的基本屬性:數據爲文本框

Fruit food; 
public Fruit Food 
{ 
    get {return this.food;} 
    set 
    { 
     this.food= value; 
     this.RefreshDataBindings(); 
    } 
} 

public void RefreshDataBindings() 
{ 
    this.textBox.DataBindings.Clear(); 
    this.textBox.DataBindings.Add("Text", this.Food, "Name"); 
} 

所以我設置this.Food形式外,然後將其在用戶界面中顯示出來。

如果我修改this.Food,它會正確更新。如果我以編程方式修改用戶界面,如:

this.textBox.Text = "NewFruit",它不更新此。食物。

這是爲什麼?我還爲Fruit.Name實施了INotifyPropertyChanged,但仍然相同。

回答

54

我建議你執行INotifyPropertyChanged並更改綁定的代碼如下:

this.textBox.DataBindings.Add("Text", 
           this.Food, 
           "Name", 
           false, 
           DataSourceUpdateMode.OnPropertyChanged); 

這會解決它。

請注意,默認DataSourceUpdateModeOnValidation,所以如果您沒有指定OnPropertyChanged,模型對象將不會更新,直到您的驗證發生之後。

+0

非常感謝♥ – 2017-10-27 15:25:46

-2

您不能將數據綁定到某個屬性,然後明確地爲該數據綁定屬性賦值。

+0

謝謝,但爲什麼這是不可能的?我認爲這是2種方式? – 2009-10-23 21:34:52

+0

Joan,這是WPF中的(大大改進)綁定。 WinForms相對簡單。 – 2009-10-23 21:54:50

+0

感謝Henk,你知道如何在Winforms中實現這一點嗎?不幸的是,我無法使用wpf來處理這個項目。 – 2009-10-23 21:55:36

1

您需要一個綁定源對象來充當中介並協助綁定。然後,而不是更新用戶界面,更新下劃線模型。

var model = (Fruit) bindingSource1.DataSource; 

model.FruitType = "oranges"; 

bindingSource.ResetBindings(); 

閱讀BindingSource和簡單數據綁定爲Windows Forms

0

我們可以使用下面的代碼

textBox1.DataBindings.Add("Text", model, "Name", false, DataSourceUpdateMode.OnPropertyChanged); 

  • "Text" - 模型對象輸入代碼在這裏
  • "Name" - - 文本框
  • 的財產
  • model模型的值綁定文本框。