我有一个XML文件,我将用作项目的数据库,这是我的xml文件:
我找到了这个问题并试了一下: How to bind xml to the WPF DataGrid correctly?
我想在每个DataGrid中分别显示每个 Semestre 的 Cadeiras 。改变了一些未成年人的东西,以适应我的项目,但它没有奏效,花了几个小时后我设法让它工作查询XElement:
XElement db = XElement.Load("db.xml");
var cadeira = from elem in db.Descendants("Semestre")
where elem.Element("Nome").Value == "Semestre 1"
select elem.Element("Cadeiras");
dataGrid1.DataContext = cadeira;
第一个问题:这有效但我只是想知道这是否是最好的事情,因为,这个DataGrid在一个TabItem(在TabControl里面),后来我将不得不创建新的TabItems(对于每个Semestre) ,在运行时使用带有相应Semestre的Cadeiras的DataGrid,而没有XAML绑定辅助。
第二个问题:在XAML中,此处How to bind xml to the WPF DataGrid correctly?的绑定与此WPF Datagrid binding to xml之间的绑定有何区别?
提前致谢。
致以最诚挚的问候,
-N
答案 0 :(得分:0)
您可以通过data templating 做很多</ strong>,在XAML-Parser(例如Kaxaml)中尝试此示例:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<Page.Resources>
<XmlDataProvider x:Key="data" XPath="GPA/Semestre" Source="http://pastebin.com/raw.php?i=JgyYkn4E"/>
</Page.Resources>
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<TabControl ItemsSource="{Binding Source={StaticResource data}}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding XPath=Nome}"/>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding XPath=Cadeiras/Cadeira}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Activa" Binding="{Binding XPath=Activa}"/>
<DataGridTextColumn Header="Nome" Binding="{Binding XPath=Nome}"/>
<DataGridTextColumn Header="Nota" Binding="{Binding XPath=Nota}"/>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
</ScrollViewer>
</Page>
这将为您创建TabControl和所有DataGrids。 (在你的示例中,Cadeiras看起来并不复杂,所以每个都只是DataGrid中的一行,如果每个Cadeira需要一个DataGrid,你也可以通过创建ItemsControl
ItemTemplate
来实现它。 1}}是DataGrid
)
这些问题中的方法之间的区别在于它们使用不同的类来表示XML,通常您不会使用XElement
,因为它不会在绑定中支持XPath
。
LINQ to XML对象XDocument和XElement不使用XPath。有关详细信息,请参阅How to: Bind to XDocument, XElement, or LINQ for XML Query Results.
没有固有的正确方法可以做到这一点,但由于XmlDataProviders
有本机绑定支持,因此XmlDocuments
除非我有充分的理由不这样做,否则我会继续使用。