Blog của Lê Văn Luật

Đời người thì có hạn mà sự học thì vô hạn!

WPF: Sử dụng XmlDataProvider

Sử dụng XmlDataProvider giúp nhanh chóng tạo dữ liệu cho ứng dụng WPF rất tiện lợi với những ứng dụng nhỏ không cần bảo vệ dữ liệu hoặc khi cần nhanh chóng có dữ liệu để thử.

Bài này dựa trên bài gốc ở đây

Có 2 cách sử dụng thường gặp (còn 1 cách nữa nhưng không trình bày ở đây). Cách thứ nhất không cho phép cập nhật dữ liệu!

1. Dữ liệu được đặt trực tiếp trong file XAML

<Window x:Class="xmlDataProvider.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>
        <XmlDataProvider x:Key="MyData">
            <x:XData>
                <People xmlns="">
                    <Person FirstName="Nguyễn Văn" LastName="Nam" BirthDate="1985-1-5" Sex="0"/>
                    <Person FirstName="Trần Thị" LastName="Nga" BirthDate="1987-5-5" Sex="1"/>
                    <Person FirstName="Đặng Văn" LastName="Hà" BirthDate="1986-6-5" Sex="0"/>
                </People>
            </x:XData>
        </XmlDataProvider>
        <DataTemplate x:Key="PersonItemTemplate">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding XPath=@FirstName}" Width="100"/>
                <TextBlock Text="{Binding XPath=@LastName}" Width="50"/>
                <ComboBox SelectedIndex="{Binding XPath=@Sex}" Width="60">
                    <ComboBoxItem Content="Nam">
                        <ComboBoxItem.Tag>0</ComboBoxItem.Tag>
                    </ComboBoxItem>
                    <ComboBoxItem Content="Nữ">
                        <ComboBoxItem.Tag>1</ComboBoxItem.Tag>
                    </ComboBoxItem>
                </ComboBox>
                <DatePicker SelectedDate="{Binding XPath=@BirthDate}" Width="90"/>
            </StackPanel>
        </DataTemplate>
    </Window.Resources>
    <Grid>
        <ListView ItemTemplate="{DynamicResource PersonItemTemplate}"
                  ItemsSource="{Binding Source={StaticResource MyData}, XPath=/People/Person}"
                  Height="300"/>
    </Grid>
</Window>

2. Dữ liệu nằm trên file XML riêng
Hoàn toàn tương tự như trên ngoại trừ các điểm:
+ Thay dòng XmlDataProvider như sau:

<XmlDataProvider x:Key="XmlPeople" Source="DataFile.xml" XPath="/People"/>

+ Và tạo file xml chứa dữ liệu như sau và đặt tên là DataFile.XML:

<?xml version="1.0" encoding="utf-8" ?> 
<People xmlns="">
  <Person FirstName="Nguyễn Văn" LastName="Nam" BirthDate="1985-1-5" Sex="0"/>
  <Person FirstName="Trần Thị" LastName="Nga" BirthDate="1987-5-5" Sex="1"/>
  <Person FirstName="Đặng Văn" LastName="Hà" BirthDate="1986-6-5" Sex="0"/>
</People>

Với cách này, để lưu dữ liệu có thể thêm một nút và xử lý sự kiện click của nút như sau:

private void btnSave_Click(object sender, RoutedEventArgs e)
{
    XmlDataProvider data = (XmlDataProvider)this.Resources["XmlPeople"];
    if (data != null)
    {
        data.Document.Save(data.Source.ToString());
        MessageBox.Show("Đã lưu dữ liệu");
    }
    else<br />
        MessageBox.Show("Lỗi: Không thể lưu dữ liệu!");
}

Lưu ý: Trong Visual Studio cần điều chỉnh thuộc tính của file DataFile.XML:
+ BuildAction: đổi thành Content và
+ Copy to Output Directory: đổi thành Copy if newer
Việc này để Visual Studio chép file DataFile.XML tới thư mục chạy chương trình như vậy mới có thể lưu dữ liệu.
File dữ liệu DataFile.XML trong ví dụ trên phải nằm cùng thư mục với file chương trình (file .EXE).

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

Information

This entry was posted on 23/02/2013 by in Lập trình C# & WPF and tagged , .

Điều hướng

%d bloggers like this: