C# TreeView没有';更改后不刷新

C# TreeView没有';更改后不刷新,c#,wpf,xml,treeview,C#,Wpf,Xml,Treeview,我为IIS web.config文件的版本编写了一个程序。我的TreeView控件有问题,在更改源XmlDocument变量中的某些内容后,该控件不希望刷新自身。 这是WPF项目 XAML中的窗口资源: <Window.Resources> <XmlDataProvider x:Key="XmlData" /> </Window.Resources> 有人能解释一下为什么它不起作用吗 [编辑] 我试图修改如下两种方法: private void Ope

我为IIS web.config文件的版本编写了一个程序。我的TreeView控件有问题,在更改源XmlDocument变量中的某些内容后,该控件不希望刷新自身。
这是WPF项目

XAML中的窗口资源:

<Window.Resources>
   <XmlDataProvider x:Key="XmlData" />
</Window.Resources>
有人能解释一下为什么它不起作用吗

[编辑]

我试图修改如下两种方法:

private void OpenXmlFile(string filePath)
{
    XmlEditor.Clear();
    XmlEditor.Load(filePath);

    _xml = new XmlDocument();
    _xml.Load(filePath);

    _xmlDataProvider.Document = _xml;
}

private void saveChangesButton_Click(object sender, EventArgs e)
{
    // ...

    _xmlDataProvider.Document.Save(_tempFileName);
    _xmlDataProvider.Refresh();
}

现在我在
xmlDataProvider.Refresh()时得到了NullReferenceException

您好,您可以在TreeView和observable集合上尝试双向绑定

{Binding .... Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}
首先,您可以修改您的绑定

ItemsSource="{Binding Source={StaticResource XmlData}, XPath=*, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"

您好,您可以在TreeView和observable集合上尝试双向绑定

{Binding .... Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}
首先,您可以修改您的绑定

ItemsSource="{Binding Source={StaticResource XmlData}, XPath=*, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"

如果
OpenXmlFile()
函数中的
xmlDataProvider.Document
值为空,则仅设置该值。当你设定
\u xml=new XmlDocument()
,它将
\u xml
设置为指向新对象,但
xmlDataProvider
仍指向旧对象。然后,您有以下两行:

if(_xmlDataProvider.Document == null)
    _xmlDataProvider.Document = _xml;

如果您是从
RefreshViews()
进入这里的,
\u xmlDataProvider.Document
将不会为空,因此您永远不会刷新绑定到数据提供程序的XML文件。

如果
OpenXmlFile()
函数为空,您只需设置
xmlDataProvider.Document
的值。当你设定
\u xml=new XmlDocument()
,它将
\u xml
设置为指向新对象,但
xmlDataProvider
仍指向旧对象。然后,您有以下两行:

if(_xmlDataProvider.Document == null)
    _xmlDataProvider.Document = _xml;

如果您是从
RefreshViews()
进入这里的,
\u xmlDataProvider.Document
将不会为空,因此您永远不会刷新绑定到数据提供程序的XML文件。

您能描述一下如何更改它吗?如何将_xml的新实例绑定到数据提供程序?我建议取消空检查,或者使用Aghilas提出的双向绑定建议。您的代码不再调用
RefreshViews()
。调用
\u xmlDataProvider.Refresh()将不起作用,因为您正在将更改保存到另一个文件,并且引用数据提供程序将重新加载您首先指定的文件。您能否描述如何更改它?如何将_xml的新实例绑定到数据提供程序?我建议取消空检查,或者使用Aghilas提出的双向绑定建议。您的代码不再调用
RefreshViews()
。调用
\u xmlDataProvider.Refresh()无法工作,因为您正在将更改保存到另一个文件,并且引用数据提供程序将重新加载您首先指定的文件。很抱歉,我无法使用该文件。我甚至试图修改我的代码,使其更符合您的建议,但它一直不起作用:/对我来说,这是我的项目中的工作,确保模式双向是针对这种情况的,为了从源代码到控制或从源代码到控制进行绑定,这是一种很好的做法,我很遗憾,但它对我不起作用。我甚至试图修改我的代码,使其更符合您的建议,但它没有起作用:/对我来说,这是我的项目中的工作,确保模式双向适用于这种情况,为了从源代码对控件或从源代码对控件进行绑定,调用
\xmlDataProvider.Refresh()是一种很好的做法不会刷新文件,而是将更改保存到
\u tempFileName
。您可能希望
saveChangesButton\u Click()
仍然调用
OpenXmlFile()
。此外,设置
\u xmlDataProvider.Document
会自动调用
\u xmlDataProvider.Refresh()
(请参阅)调用
\u xmlDataProvider.Refresh()不会刷新文件,而是将更改保存到
\u tempFileName
。您可能希望
saveChangesButton\u Click()
仍然调用
OpenXmlFile()
。此外,设置
\u xmlDataProvider.Document
会自动调用
\u xmlDataProvider.Refresh()
(请参阅)