C# TreeView没有';更改后不刷新
我为IIS web.config文件的版本编写了一个程序。我的TreeView控件有问题,在更改源XmlDocument变量中的某些内容后,该控件不希望刷新自身。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
这是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()
(请参阅)