刷新按钮以更新xml有界列表框

时间:2014-10-02 15:12:47

标签: c# wpf refresh

我有一个与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";
}

1 个答案:

答案 0 :(得分:0)

看看这一行:

listBox1.DataSource = presets;

虽然您设置DataSource,但在第一次调用LoadXML()后,您将其设置为已有的相同值。由于集合引用是相同的,因此赋值实际上是无操作:基础数据源没有改变,因此列表框不会刷新。最简单的解决方法是将DataSource重置为null,然后再将其设置为presets。但理想情况下,您只需将数据源绑定到ObservableCollection或其他支持更改通知的集合。

此外,正如@ user2880486所述,您不应同时使用ItemsDataSource;它们旨在互相排斥。使用其中一个,但不能两个。