0
我已經設置了一個簡單的表單。 ListBox從顯示Name屬性的「業務對象」中的列表中獲取值,並提供Value屬性。以編程方式更改SelectedIndex時更改綁定屬性
此外,ListBox的SelectedItem屬性綁定到同一業務對象中的屬性。
使用UI從列表中選擇一個值可正確更改對象屬性(單擊按鈕時選中)並且正確的值可用。到現在爲止還挺好。
但是,如果在代碼中更改了列表框的SelectedIndex屬性,則UI會按預期正確更改,但業務屬性不會更改 - 它似乎錯過了更改事件。對於構造函數和按鈕事件處理程序中的設置都是如此(請參閱代碼)。 我錯過了什麼,或者我錯了什麼。 (我只包括我寫的代碼 - 而不是VS嚮導生成的東西)
class Frequency
{
public String Name { get; set; }
public Int16 Value { get; set; }
public Frequency(String name, Int16 value)
{
Name = name;
Value = value;
}
}
class FrequencyList : System.ComponentModel.BindingList<Frequency>
{
}
class Model
{
public static FrequencyList FrequencyValues = new FrequencyList()
{
new Frequency("Slowest", 100),
new Frequency("Slow", 150),
new Frequency("Medium", 1000),
new Frequency("Fast", 5500),
new Frequency("Fastest", 10000)
};
public Frequency StartFrequency { get; set; }
public void DoStuff()
{
if (StartFrequency == null)
return;
Int16 freq = StartFrequency.Value;
}
}
public partial class Form1 : Form
{
private Model myModel = new Model();
public Form1()
{
InitializeComponent();
// Bind the list to a copy of the static model data
this.listBox1.DataSource = Model.FrequencyValues;
// Bind the control to the model value
this.listBox1.DataBindings.Add("SelectedItem", myModel, "StartFrequency");
// Select the start value
this.listBox1.SelectedIndex = 3;
}
private void button1_Click(object sender, EventArgs e)
{
Int16 f = (Int16)listBox1.SelectedValue;
this.myModel.DoStuff();
int new_index = listBox1.SelectedIndex + 1;
if (new_index >= listBox1.Items.Count)
new_index = 0;
listBox1.SelectedIndex = new_index;
}
}
對不起,轉向不好。點擊事件僅用於測試。我可以強制使用SelectedIndexChanged事件更新業務對象 - 但這不是我想要做的。如果StartFrequency屬性正在通過UI更改進行更新,那麼爲什麼在程序中設置了SelectedIndex時不會更新它? – 2012-03-10 19:27:49
@ Gray-M不,我的意思是你需要在'listBox1_SelectedIndexChanged'中有'freq.value = Convert.ToInt16(listBox1 [listBox1.SelectedIndex] .Text)'並且確保你已經將它鏈接到了控件上。或者通過在屬性工具欄中自動生成,或者手動添加'this.listBox1.SelectedIndexChanged + = new System.EventHandler(this.listBox1_SelectedIndexChanged);'在表單初始化的某處。然後你可以通過使用'listBox1.SelectedIndex = 3'或者其他任何東西來自動觸發它。 – ketura 2012-03-10 19:41:43
好吧,這確實有用,但不需要從表單到對象的數據綁定。事件處理程序完成了這一切。我試圖讓綁定完成這一切。 – 2012-03-11 10:20:24