djee 发表于 2015-8-31 16:42:49

使用XML linq绑定数据

我花了几个小时寻找如何做到这一点,不幸的是,作为一个VB.NET新手,我不知道如何做到这一点。我试图获取存储在XML中的数据,并将其绑定到DataGridTextColumn。任何人有一些例子,我可以得到我的牙齿或一些建议,就如何做到这一点?
**** Hidden Message *****

MickD 发表于 2015-8-31 17:28:52

没有简单的方法可以做到这一点,xml可以有一个非常扁平的结构或非常嵌套,而datagrid基本上是一个扁平的数据表。
因此,根据结构,如果它非常扁平,您可以使用类似xpath的东西来查询一些节点并构建一个数据集对象并将其绑定到datagrid。另一种方法是使用xpath并手动加载网格,听起来像工作,但您只需编写一次,但它会为特定的xml模式编写硬代码。
说到模式,您可以使用xsd.exe为xml对象编写类,这可以使您将对象绑定到属性网格,也许还有数据网格。这样您就可以像. net中的任何其他类一样查询xml对象。您需要先创建模式,但xsd.exe也可以为您这样做。
F#有TypeProviders,它做的事情与xsd.exe几乎相同,但在飞行中,非常酷的东西!我想你可以通过一点学习来使用vb.net的这些。
你有更具体的例子来说明你需要做什么吗?

djee 发表于 2015-8-31 17:37:55

好像我不久前做过这个,而且我使用了<br>XMLDataProvider<br>https://msdn.microsoft.com/en-us/library/system.windows.data.xmldataprovider(v=vs.110)。aspx
我看看能不能把它挖出来

MexicanCustard 发表于 2015-8-31 20:25:36

我正在构建这个应用程序,以便它根据选定的项目(为我的办公室)设置一些选项路径。我想用存储在xml文件中的一些信息填充我的DataGridTextCol列(或任何其他相关的UI元素)。此文件包含杂项值,如项目编号、管理器、单位等...我已经编写了从xml写入和读取的部分(使用一些LINQ查询)。
我是数据绑定和xaml的新手...希望在这里获得有关如何完成此任务的更多指导...
仍在阅读LINQ到XML类中的动态属性...
也许我要走得很远?您通常如何存储信息以供持久使用?在. txt文件中?

dgorsman 发表于 2015-9-1 07:53:40

或者您可以使用序列化,如果你构建了一个[可序列化的]类,那么就这么简单。    var MySerialClass = new MySerialClass();。
var streamReader = new streamReader(" c \ \ my directory \ \ my file . XML ");。
var textReader = new XmlTextReader(streamReader);。
var serializer = new XML serializer(my serialclass,GetType());。

if(序列化程序,cande serialize(textReader))。
{。
var obj =序列化程序,反序列化(textReader);。
var type = myserialclass,GetType();。
var props = type,get properties();。
foreach(道具中的变量道具)。
{。
道具,SetValue(myserialclass,prop。GetValue(obj,null),null);。
}。
}。

文本阅读器,close();。
流阅读器,close();。

djee 发表于 2015-9-1 10:37:08


取决于规模和用途。我经常使用XML进行“交错”存储。数据库或CSV文件)会使生活变得困难。很多事情都归结于存储什么以及如何使用,这将决定存储方法的类型和组织。

MexicanCustard 发表于 2015-9-1 11:01:04


如果信息丢失重置为默认值,这是世界末日吗?

mohnston 发表于 2015-9-1 15:20:44

我使用下面链接中的类将设置读/写到xml、注册表或ini文件。它被很好地组合在一起,对于它试图做的事情非常有用
它不是通用的xml、注册表、ini文件读取器/写入器。其唯一目的是将设置读/写到xml、注册表或ini。
http://www.codeproject.com/Articles/5304/Read-Write-XML-files-Config-files-INI-files-or-the

MickD 发表于 2015-9-1 22:18:47

我不知道序列化/反序列化...似乎这正是我正在寻找的...现在,我必须找到如何将我的属性数据绑定到我的xaml代码...(永不停止...)找到以下二进制序列化(在SoapSerializer上 -->不能编辑文件和较小的文件大小)(定义类时,您必须指定
...);
我附上了一个小项目示例,在下面显示了两种序列化类型的操作...VB.NET 当然...
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Binary
Imports System.IO
Public Class BinarySerializer
    Shared Sub SerializeToFile(ByVal FileInfo As FileInfo, ByVal As Object)
      Dim locFs As FileStream = New FileStream(FileInfo.FullName, FileMode.Create)
      Dim locBinaryFormatter As New BinaryFormatter(Nothing, New StreamingContext(StreamingContextStates.File))
      locBinaryFormatter.Serialize(locFs, )
      locFs.Flush()
      locFs.Close()
    End Sub
    Shared Function DeserializeFromFile(ByVal FileInfo As FileInfo) As Object
      Dim locObject As Object
      Dim locFs As FileStream = New FileStream(FileInfo.FullName, FileMode.Open)
      Dim locBinaryFormatter As New BinaryFormatter(Nothing, New StreamingContext(StreamingContextStates.File))
      locObject = locBinaryFormatter.Deserialize(locFs)
      locFs.Close()
      Return locObject
    End Function
End Class

MickD 发表于 2015-9-2 07:43:25


绑定是很容易的部分。您的类将有一个可观察集合
来表示表格数据。将DataGrid的ItemsSource绑定到该集合,DataGridTextCol列将绑定到类MyTablarData的各个属性。确保MyTablularData继承INotifyProperty tyChanged并在每个属性中放置更改通知。DataGrid将处理其余部分。
现在如果您真的想以正确的方式执行此操作。然后我会将我的模型MyTablarData包装在一个视图模型中,让视图模型处理属性更改,并将视图模型绑定到DataGrid。两种方式都可以工作,这取决于您要编写多少代码。
页: [1]
查看完整版本: 使用XML linq绑定数据