2010-07-20 45 views
5

Özellikle bir xml dosyasının iki yönlü bağlanmasını gerçekleştirerek, WPF ile tutuşlara kavuşmak için uğraşıyorum. XMLDataProvider kullanmalı mı yoksa başka bir (daha iyi) seçeneği mi? Veriler iyi görünüyor ancak bir girişi değiştirdiğimde değişiklikler xml dosyasına yansıtılmıyor.WPF iki yönlü bağlama 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> 

CodeBehind:

public MainWindow() 
    { 
     InitializeComponent(); 
    } 

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

GÜNCELLEME: xml dekar alanda Bazı yararlı kaynaklar tabinding:

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

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

cevap

1

XMLDataProvider kullanarak sorun yok. Sadece aynı XML dosyasına okuduğunuzdan ve yazdığınızdan emin olmalısınız.

Sadece kodunuzu aşağıdaki gibi güncelleştirin;

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); 
}