1

XMLファイルを開き、ListBox単一の要素を選択できる場所に要素を表示する必要があります。選択した要素は、TextBox変更可能な場所に表示されます。

でXMLファイルを開いて表示することができましたListBoxTextBoxしかし、どうすれば選択したXMLコンテンツを2つのesに表示できますか?

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つのTextBoxesに表示され、ユーザーは各値を変更できます。

4

2 に答える 2

1

だいたい:

  • 2つのTextBoxesをコンテナに配置しますC1
  • にバインドC1.DataContextするListBox1.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:

そして、内側のグリッドのバインディングを修正しましょう。

  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 に答える