2014-10-02 83 views
0

我有一個列表框是綁定到xml數據源。 我想創建一個刷新列表框的按鈕。刷新按鈕來更新xml有界列表框

listbox1.refresh不起作用。

Thaks

private void LoadXML() 
{ 
    presets.Clear(); 
    if(System.IO.File.Exists(GetXMLFileName())) 
    { 
     XDocument xDoc = XDocument.Load(GetXMLFileName()); 
     XElement xMain = xDoc.Element("Main"); 
     foreach(var xPreset in xMain.Elements()) 
     { 
      Preset preset = new Preset(xPreset); 
      presets.Add(preset); 
     } 
    } 
    else 
    { 
     for (int i = 0; i < maxPresets; i++) 
      presets.Add(new Preset() { Id = i }); 
    } 
    listBox1.Items.Clear(); 
    listBox1.DataSource = presets; 
    listBox1.DisplayMember = "name"; 
} 
+0

您不應該同時使用Items和DataSource。如果你的列表框正確界定,更改數據源將自動'刷新'它。如果您正在更改「預設」,則您的預設需要成爲可觀察的收藏。 – user2880486 2014-10-02 15:19:11

回答

0

看看這一行:

listBox1.DataSource = presets; 

雖然你設置DataSource,第一次調用LoadXML()後,你將它設置爲它已經有了相同的值。由於集合引用是相同的,因此該分配實際上是無操作的:底層數據源沒有更改,因此列表框不會刷新。最簡單的解決方法是將DataSource重置爲null,然後將其設置爲presets。但理想情況下,您應該簡單地將數據源綁定到ObservableCollection或其他支持更改通知的集合。

此外,正如@ user2880486指出的那樣,您不應該同時使用ItemsDataSource;它們被設計爲相互排斥。使用一個或另一個,但不能同時使用。

+0

謝謝,但是當我嘗試「listBox1.DataSource = null;」 iget:「索引超出範圍,必須是非負值,小於集合的大小。」 – JoZee001 2014-10-02 16:23:41