2010-07-20 74 views
5

Tôi đang cố gắng nắm bắt được WPF, cụ thể hơn là thực hiện liên kết hai chiều của tệp xml. Tôi có nên sử dụng XMLDataProvider hoặc là tùy chọn khác (tốt hơn) của họ không? Dữ liệu hiển thị tốt nhưng khi tôi thay đổi mục nhập, các thay đổi không được phản ánh trong tệp xml.WPF liên kết hai chiều 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> 

Các 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"); 
    } 

UPDATE: Một số tài nguyên hữu ích cho xml da tabinding:

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

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

Trả lời

1

Không có vấn đề bằng cách sử dụng XMLDataProvider. Bạn chỉ cần đảm bảo rằng bạn đang đọc và ghi vào cùng một tệp XML.

Chỉ cần cập nhật mã của bạn như sau;

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); 
} 
Các vấn đề liên quan