1

应该打开一个 XML 文件,并且元素应该显示在ListBox可以选择单个元素的位置。所选元素应显示在TextBox可以更改的位置。

我设法在ListBox. 但是我怎样才能设法在 2 TextBoxes 中显示选定的 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>

所选 Book 的 Title 和 Summary 应该显示在 2 TextBoxes 中,用户可以在其中更改每个值。

4

2 回答 2

1

大致:

  • 将 2 个TextBoxes 放在一个 Container 上C1
  • 绑定C1.DataContextListBox1.SelectedItem

而且我不确定绑定会给出什么结果XPath="*"ListBox1你可能想要这样的东西:

<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" />

试试看。

编辑2:

让我们修复内部 Grid 的绑定:

  DataContext="{Binding ElementName=listBox1, Path=SelectedItem}"
于 2013-01-13T17:24:27.567 回答
0

尝试以下操作:

<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>
于 2013-01-13T17:26:55.477 回答