[英]Bind selected XML Content to Textbox
应该打开一个XML文件,并将元素显示在可以选择单个元素的ListBox
中。 所选元素应显示在可以更改它们的TextBox
。
我设法在ListBox
打开并显示XML文件。 但是,如何在2个TextBox
显示所选的XML内容呢?
这是XML文件的内容。
<Inventory xmlns="">
<Books>
<Book ISBN="0-7356-0562-9" Stock="in" Number="9">
<Title>XML in Action</Title>
<Summary>XML Web Technology</Summary>
</Book>
<Book ISBN="0-7356-1370-2" Stock="in" Number="8">
<Title>Programming Microsoft Windows With C#</Title>
<Summary>C# Programming using the .NET Framework</Summary>
</Book>
<Book ISBN="0-7356-1288-9" Stock="out" Number="7">
<Title>Inside C#</Title>
<Summary>C# Language Programming</Summary>
</Book>
<Book ISBN="0-7356-1377-X" Stock="in" Number="5">
<Title>Introducing Microsoft .NET</Title>
<Summary>Overview of .NET Technology</Summary>
</Book>
<Book ISBN="0-7356-1448-2" Stock="out" Number="4">
<Title>Microsoft C# Language Specifications</Title>
<Summary>The C# language definition</Summary>
</Book>
</Books>
</Inventory>
这是MainWindow.xaml的内容。
<?xml version="1.0" encoding="utf-8"?>
<Window
x:Class="XML_View_Edit.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow"
Width="500"
Height="200">
<Window.Resources>
<XmlDataProvider x:Key="InventoryData"
XPath="Inventory/Books"
Source="Data.xml"/>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition
Height="100" />
<RowDefinition />
</Grid.RowDefinitions>
<ListBox
Grid.Row="0"
Name="listBox1" >
<ListBox.ItemsSource>
<Binding Source="{StaticResource InventoryData}" XPath="Book"/>
</ListBox.ItemsSource>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text = "{Binding XPath=Title}" />
<TextBlock Text= " - " />
<TextBlock Text = "{Binding XPath=Summary}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Grid
Grid.Row="1"
DataContext="listBox1.SelectedItem">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition
Width="70" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Label
Content="Title"
Grid.Row="0"
Grid.Column="0"
Name="label_title" />
<Label
Content="Summary"
Grid.Row="1"
Grid.Column="0"
Name="label_summary" />
<TextBox
Grid.Column="1"
Name="textbox_title"
Grid.Row="0" />
<TextBox
Grid.Column="1"
Name="textbox_summary"
Grid.Row="1" />
</Grid>
</Grid>
</Window>
所选书籍的书名和摘要应显示在2个TextBox
,用户可以在其中更改每个值。
大致:
TextBox
放置在容器C1
C1.DataContext
绑定到ListBox1.SelectedItem
而且我不确定ListBox1
绑定中的XPath="*"
是什么结果。 您可能想要类似的东西:
<Binding Source="{StaticResource InventoryData}" XPath="@ISBN"/>
您实际上需要绑定TextBox
元素:
<TextBox
Grid.Column="1"
Name="textbox_title"
Text = "{Binding XPath=Title}" <!-- this -->
Grid.Row="0" />
<TextBox
Grid.Column="1"
Name="textbox_summary"
Text = "{Binding XPath=Summary}" <!-- and this -->
Grid.Row="1" />
试试看。
让我们修复内部网格的绑定:
DataContext="{Binding ElementName=listBox1, Path=SelectedItem}"
请尝试以下操作:
<ListBox
Grid.Row="0"
Name="listBox1" >
<ListBox.ItemsSource>
<Binding Source="{StaticResource InventoryData}" XPath="*"/>
</ListBox.ItemsSource>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text = "{Binding XPath=Title}">
<TextBlock Text = "{Binding XPath=Summary}">
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.