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>
Advertisements

Trả lờ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 Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s