我有一个与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 :(得分:0)
看看这一行:
listBox1.DataSource = presets;
虽然您设置DataSource
,但在第一次调用LoadXML()
后,您将其设置为已有的相同值。由于集合引用是相同的,因此赋值实际上是无操作:基础数据源没有改变,因此列表框不会刷新。最简单的解决方法是将DataSource
重置为null
,然后再将其设置为presets
。但理想情况下,您只需将数据源绑定到ObservableCollection
或其他支持更改通知的集合。
此外,正如@ user2880486所述,您不应同时使用Items
和DataSource
;它们旨在互相排斥。使用其中一个,但不能两个。