如何在 wpf C# 中使用 xmldataprovider 读取 xml 文件
How to read an xml file using xmldataprovider in wpf C#
我有一个 xaml 文件,其中定义了我的 wpf 控件,我将其所有标签控件绑定到一个 xml 文件并从此文件填充。我正在使用 xmldataprovider 使用其来源 属性
<Grid.DataContext>
<XmlDataProvider x:Name="LoadData" Source="data.xml" XPath="Loads/*" Document=/>
</Grid.DataContext>
<Label Grid.Row="1" Name="textbox1" Grid.Column="0" Grid.RowSpan="3" Grid.ColumnSpan="2" Background="Gray" BorderThickness="2" Content="{Binding XPath=teamname, Mode=OneWay}" FontSize="36">
在后面的代码中,
string filename = "C:\data.xml";
LoadData.Source = new Uri(filename);
一切正常,我唯一的问题是我想以只读模式打开这个 xml,因为另一个程序正在写入它并且我得到“正在被另一个程序使用”的异常
xmldataprovider 是否有这样的规定来设置 source/read 数据提供程序中的 xml 文件。之前有没有人这样做过...input/suggestions欢迎...非常感谢
使用 Source
属性 没有这种可能性。 Source
表示 Uri
,基于此创建 WebRequest
,使用 Stream
获取数据。但是,您无法控制此流的创建方式。
有一个解决方法;但是,您必须在代码中执行此操作。您可以手动加载 XML 文档并将其分配给 XmlDataProvider
.
的 Document
属性
类似于:
XmlDocument doc = new XmlDocument();
using (FileStream s = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
doc.Load(s);
}
LoadData.Document = doc;
我有一个 xaml 文件,其中定义了我的 wpf 控件,我将其所有标签控件绑定到一个 xml 文件并从此文件填充。我正在使用 xmldataprovider 使用其来源 属性
<Grid.DataContext>
<XmlDataProvider x:Name="LoadData" Source="data.xml" XPath="Loads/*" Document=/>
</Grid.DataContext>
<Label Grid.Row="1" Name="textbox1" Grid.Column="0" Grid.RowSpan="3" Grid.ColumnSpan="2" Background="Gray" BorderThickness="2" Content="{Binding XPath=teamname, Mode=OneWay}" FontSize="36">
在后面的代码中,
string filename = "C:\data.xml";
LoadData.Source = new Uri(filename);
一切正常,我唯一的问题是我想以只读模式打开这个 xml,因为另一个程序正在写入它并且我得到“正在被另一个程序使用”的异常
xmldataprovider 是否有这样的规定来设置 source/read 数据提供程序中的 xml 文件。之前有没有人这样做过...input/suggestions欢迎...非常感谢
使用 Source
属性 没有这种可能性。 Source
表示 Uri
,基于此创建 WebRequest
,使用 Stream
获取数据。但是,您无法控制此流的创建方式。
有一个解决方法;但是,您必须在代码中执行此操作。您可以手动加载 XML 文档并将其分配给 XmlDataProvider
.
Document
属性
类似于:
XmlDocument doc = new XmlDocument();
using (FileStream s = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
doc.Load(s);
}
LoadData.Document = doc;