2011-02-22 74 views
3

我是相對較新的winforms編程,來自ASP.NET,我努力從checklistbox.items綁定東西,如「啓用」字段。從CheckedListBox.Items綁定啓用屬性 - Winforms

例如,我有一個:

class A 
{ 
    public string Name {get;set;} 
    public bool Enabled {get; set;} 
} 

我然後創建一個列表項,並綁定到checkedlistbox。

List<A> aList = new List<A>(
    new A{Name="Item1", Enabled=true}, 
    new A{Name="Item2", Enabled=false}); 

CheckedListBox.DataSource = aList; 
CheckedListBox.DisplayMember = "Name"; 

最後,我如何使項目「Enabled == false」在checkedlistbox中顯示爲禁用?

當然,我需要對Checked屬性做同樣的事情,但爲了簡單起見,我並沒有將它添加到示例中。

感謝,

約翰

回答

1

您不能執行這種與WinForms的CheckedListBox豐富的數據綁定。

您可以設置數據源,然後將DisplayMember和ValueMember屬性,但在那裏對你有代碼來完成剩下的(包括設置Enabled和經過性能)

設定基本的結合,如下圖所示:

checkedListBox.DataSource = aList; 
checkedListBox.DisplayMember = "Name"; 
checkedListBox.ValueMember = "Name"; 

從那裏你需要迭代數據源,根據需要設置單個項目屬性。

你可以做的一件事(我沒有嘗試過,但它應該可以工作)是CheckedListBox的子類,但在新類中有一些自定義綁定代碼。

這可能會給你一個更優雅的解決方案 - 從後面的代碼中刪除代碼,儘管取決於你的情況可能不值得花費精力。

+0

謝謝大衛。我懷疑這是不可能的,但對我錯誤的期望很高,因爲它在其他技術中。 最後猜測我會使用另一個控件,例如網格,並顯示一個複選框將其標記爲已啓用或未啓用,並且可能會更改其UI顏色以增強UI。 – 2011-02-23 14:52:54

+0

WinForms中的dataGridView控件*非常棒*,並且可以滿足您的需求。抓住dataGridView FAQ的副本 - 這個偉大的文檔將幫助您找到實現預期結果的最佳方式。 – 2011-02-23 14:52:54

+0

雖然經過反思,我認爲你不能綁定dataGridView行的enabled屬性。檢查你可以肯定。 – 2011-02-23 14:52:54