2010-07-20 10 views
5

Staram się poradzić sobie z WPF, a dokładniej wykonać wiązanie dwukierunkowe pliku xml. Czy powinienem używać XMLDataProvider lub czy jest to ich kolejna (lepsza) opcja? Dane są wyświetlane poprawnie, ale po zmianie pozycji zmiany nie są odzwierciedlane w pliku xml.Wiązanie dwukierunkowe WPF XML

XML:

<?xml version="1.0" encoding="utf-8" ?> 
<Licence> 
<Market> 
    <Name>DAX</Name> 
    <Begin>01/01/2010</Begin> 
    <End>01/04/2010</End> 
</Market> 
<Market> 
    <Name>DJI</Name> 
    <Begin>01/07/2010</Begin> 
    <End>01/10/2010</End> 
</Market> 
</Licence> 

XAML:

<Window x:Class="WpfApplication5.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Window.Resources> 
    <DataTemplate x:Key="LicenceTemplate"> 
     <Label Content="{Binding XPath=Name}"/> 
    </DataTemplate> 
</Window.Resources> 
<Grid> 
    <Grid.DataContext> 
     <XmlDataProvider x:Name="XMLData" Source="XMLFile1.xml" XPath="Licence/Market"/> 

    </Grid.DataContext> 
    <StackPanel> 
     <DataGrid x:Name="DataGridLic" ItemsSource="{Binding}" AutoGenerateColumns="False" Height="200" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="300" CellEditEnding="DataGridLic_CellEditEnding"> 
      <DataGrid.Columns> 
       <DataGridTextColumn x:Name="nameColumn" Binding="{Binding XPath=Name, Mode=TwoWay}" Header="Name" Width="100" Foreground="#FFC28383" /> 
       <DataGridTextColumn x:Name="BegColumn" Binding="{Binding XPath=Begin, Mode=TwoWay}" Header="Begin" Width="100" Foreground="#FFC14040" /> 
       <DataGridTextColumn x:Name="EndColumn" Binding="{Binding XPath=End, Mode=TwoWay}" Header="End" Width="100" Foreground="#FFC14040" /> 
      </DataGrid.Columns> 
     </DataGrid> 


    </StackPanel> 
</Grid> 

związanym kodzie:

public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void DataGridLic_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) 
    { 
     XMLData.Document.Save("XMLFile1.xml"); 
    } 

UPDATE: przydatnych zasobów XML da tabinding:

http://msdn.microsoft.com/en-us/library/bb669141.aspx

http://msdn.microsoft.com/en-us/library/cc165615.aspx

Odpowiedz

1

Nie ma problemu z wykorzystaniem XMLDataProvider. Musisz tylko upewnić się, że czytasz i piszesz do tego samego pliku XML.

Po prostu zaktualizuj swój kod w następujący sposób;

public MainWindow() 
{ 
    InitializeComponent(); 
    var xmlFilePath = @"c:\whatever\XMLFile1.xml"; 
    XMLData.Source = new Uri(xmlFilePath); 
} 

private void DataGridLic_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) 
{ 
    var xmlSource = XMLData.Source.LocalPath; 
    XMLData.Document.Save(xmlSource); 
} 
Powiązane problemy