簡體   English   中英

當組合框綁定到數據時,如何更改Combobox.Text屬性?

[英]How to change the Combobox.Text property when Combobox is bound to data?

我的場景是這樣的:

在運行時,我將ToolStripComboBox綁定到struct數組:

cbxTimes.ComboBox.DataSource = PlayTimeLengths;
cbxTimes.ComboBox.DisplayMember = "Description";
cbxTimes.ComboBox.ValueMember = "Minutes";

ToolStripComboboxDropDownStyle設置為DropDown

一切正常,我可以從下拉列表中選擇值,也可以在控件中編寫文本。

但是我想防止用戶按下某些控件,並在按下某些其他控件時替換Text屬性。

我試圖在KeyPress事件中完成此操作:

private void cbxTimes_KeyPress(object sender, KeyPressEventArgs e)
{
    var cbxSender = ((ToolStripComboBox)sender).ComboBox;
    string S = cbxSender.Text;
    //some operations on the S variable
    cbxSender.Text = S;
    e.Handled = true;
} // breakpoint here shows that cbxSender.Text is not changed to S!

因此,Text屬性沒有更改,但是我沒有任何異常。 但是,如果我進一步運行程序(退出調試),我會看到Text屬性已更改-更具體地說。 我在控件內看到了來自S的文本。

現在,假設我第二次按任意鍵,並且在同一事件中再次進入調試器:

private void cbxTimes_KeyPress(object sender, KeyPressEventArgs e)
{
    var cbxSender = ((ToolStripComboBox)sender).ComboBox;
    string S = cbxSender.Text; // this time breakpoint is here
    //some operations on the S variable
    cbxSender.Text = S;
    e.Handled = true;
} // breakpoint here shows that cbxSender.Text is not changed to S!

但是這一次我在第二行上放置了斷點,並且在檢查了Text屬性之后,我發現它仍然沒有改變。 盡管我在事件觸發時第一次對其進行了更改,但更改后的文本在控件中可見。 但是在調試器下,我看到了不同的值,我看到了一開始就設置的值。 屬於結構數組的值。

那我該怎么做才能克服這個問題呢?

老實說,這是我討厭Windows Forms數據綁定的事情之一。 在WPF中,您不會直接綁定到對象,而是會綁定到一個“ ViewModel”對象,該對象封裝了您擁有的視圖邏輯,而是綁定到了它。

對於所有這些,我的解決方法是完全不使用數據綁定,而是根據需要手動填充項目。 我能理解您為什么會遇到這個問題。 如果您更新了基礎綁定對象的.Text(或導致ToString()顯示該值的任何方式),則可能會看到要設置的新值,但這會破壞基礎對象的語義,這不是一個好方法。事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM