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 ObjectDataProvider

Tạo 2 lớp:
1. Lớp định nghĩa đối tượng dữ liệu

class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime BirthDate { get; set; }
    public bool Sex { get; set; }
}

2. Lớp trung gian cung cấp dữ liệu cho ObjectDataProvider

class PersonProvider
{
    List<Person> people = new List<Person>();
    public PersonProvider()
    {
        people.Add(new Person() { FirstName = "Nguyễn Văn", LastName = "Nam", BirthDate = new DateTime(1985, 1, 5), Sex = false });
        people.Add(new Person() { FirstName = "Trần Thị", LastName = "Nga", BirthDate = new DateTime(1987, 5, 5), Sex = true });
        people.Add(new Person() { FirstName = "Đặng Văn", LastName = "Hà", BirthDate = new DateTime(1986, 6, 5), Sex = false });
    }

    public List<Person> GetData()
    {
        return people;
    }
}

Trong ví dụ trên lớp trung gian PersonProvider có phương thức GetData chính là phương thức cung cấp dữ liệu. Trong lớp này ta tạo dữ liệu trực tiếp trong code và không cho phép lưu dữ liệu.
Ta hoàn toàn có thể thay thế constructor của class PersonProvider để load dữ liệu từ một nguồn bất kỳ đồng thời cũng có thể thực hiện một phương thức để lưu dữ liệu.

XAML của cửa sổ chính:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <ObjectDataProvider ObjectType="{x:Type local:PersonProvider}" x:Key="ObjectPeople" MethodName="GetData"/>
        <DataTemplate x:Key="PersonListItemTemplate">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=FirstName}" Width="100"/>
                <TextBlock Text="{Binding Path=LastName}" Width="50"/>
                <ComboBox SelectedIndex="{Binding Path=Sex}" Width="60">
                    <ComboBox.Items>
                        <ComboBoxItem>Nam</ComboBoxItem>
                        <ComboBoxItem>Nữ</ComboBoxItem>
                    </ComboBox.Items>
                </ComboBox>
                <DatePicker SelectedDate="{Binding Path=BirthDate}" Width="90"/>
            </StackPanel>
        </DataTemplate>
    </Window.Resources>
    <Grid DataContext="{Binding Source={StaticResource ObjectPeople}}">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <ListBox ItemsSource="{Binding Mode=OneWay}" ItemTemplate="{StaticResource PersonListItemTemplate}"/>
    </Grid>
</Window>

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: