2014-05-22 61 views
0

我想創建一個簡單的列表框,它綁定到一個鏈接列表。 該列表在任何給定時間只能保存5個項目。 添加新項目時,應檢查項目數>= 5,然後刪除最後一個項目並將新項目添加到頂部。只保留列表框中的5個項目

要做到這一點,我做了這個測試程序:

public partial class Form1 : Form 
{ 
    LinkedList<string> list01 = new LinkedList<string>(); 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     list01.AddFirst("AAA"); 
     list01.AddFirst("BBB"); 
     list01.AddFirst("CCC"); 

     listBox1.DataSource = new BindingSource(list01, ""); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     if (list01.Count >= 5) 
      list01.RemoveLast(); 

     list01.AddFirst(DateTime.Now.ToString()); 
     listBox1.DataSource = new BindingSource(list01, ""); 
    } 
} 

它的出現,當過我添加一個新的項目,我必須保持數據源設置爲一個新的BindingSource所添加的項目上顯示UI

有沒有辦法初始化一個綁定源,當其中的項目發生變化時,自動更新列表框而不必在每次添加新項目時都設置數據源?

+2

是否有一個理由,爲什麼你不能用'的BindingList '或'的ObservableCollection '?或者你不知道他們? –

+0

我知道'BindingList ',並且知道它沒有我想要的方法'AddTop'和'RemoveLast' – Latheesan

+0

如何從'BindingList '中移除最後一項並將項目添加到上/第一? – Latheesan

回答

1

你需要它實現收集變更通知的集合。有兩種選擇你有BindingList<T>ObservableCollection<T>

選擇任何一個,從您的評論看,你似乎只是在尋找AddFirstRemoveLast。你可以自己創建一個擴展方法。

public static class BindingListExtension 
{ 
    public static void AddFirst<T>(this BindingList<T> list, T item) 
    { 
     list.Insert(0, item); 
    } 

    public static void RemoveLast<T>(this BindingList<T> list) 
    { 
     list.RemoveAt(list.Count - 1); 
    } 
} 
0

基於Sriram Sakthivel's的建議,我已經實現了我的要求是這樣的:

public partial class Form1 : Form 
{ 
    BindingList<string> list01 = new BindingList<string>(); 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     listBox1.DataSource = list01; 

     list01.Add("AAA"); 
     list01.Add("BBB"); 
     list01.Add("CCC"); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     if (list01.Count >= 5) 
      list01.RemoveAt(4); 

     list01.Insert(0, DateTime.Now.ToString()); 
    } 
} 
相關問題