1

次のコードを使用して、XML ファイルのコンテンツをListBoxに表示し、選択したコンテンツを 2 つのTextBoxes に表示しています。

<?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="{Binding ElementName=listBox1, Path=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"
                Text = "{Binding XPath=Title}"
                Grid.Row="0" />
            <TextBox
                Grid.Column="1"
                Name="textbox_summary"
                Text = "{Binding XPath=Summary}"
                Grid.Row="1" />
        </Grid>
    </Grid>
</Window>

ユーザーはTextBoxes 内のテキストを変更でき、これも のコンテンツと同期されListBoxます。しかし、変更を XML ファイルに保存/同期するにはどうすればよいですか?

4

2 に答える 2

1

イベントハンドラー (buttonClick または windowClose) で、リソースにアクセスできます。

var provider = Resources["inventoryData"] as XmlDataProvider;

プロバイダーには Document プロパティがあります。上書きできるかどうかはわかりませんが、次のようなものです。

provider.Document.Save(newFileName);

また

provider.Document.Save(provider.Source.ToString());  // existing file name

動作するはずです。

于 2013-01-13T20:27:34.333 に答える
0

XmlDataProviderの使用に関する専門家のアドバイスに従います

Q: So two way binding utilizing the XmlDataProvider only works between the target and the "in memory" XML? Is there a way without doing my own XML file serialization to get WPF to write out the in memory XML back to the hard disk? A: Correct. You have to do your own file serialization.

また、これこれがあなたを助けるかもしれません。

于 2013-01-13T20:15:36.090 に答える