刷新按钮以更新xml绑定的列表框

本文关键字:列表 绑定 xml 按钮 更新 刷新 | 更新日期: 2023-09-27 18:25:25

我有一个列表框,它绑定到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";
}

刷新按钮以更新xml绑定的列表框

看看这一行:

listBox1.DataSource = presets;

尽管您正在设置DataSource,但在第一次调用LoadXML()之后,您将其设置为与已具有的值相同的值。由于集合引用是相同的,因此分配实际上是无操作的:底层数据源没有更改,因此列表框不会刷新。最简单的修复方法是在将DataSource设置为presets之前将其重置为null。不过,理想情况下,您应该简单地将数据源绑定到ObservableCollection或其他支持更改通知的集合。

此外,正如@user2880486所指出的,您不应该同时使用ItemsDataSource;它们被设计为相互排斥。使用其中一个,但不能同时使用。