Trong các ví dụ trước chúng ta đã đề cập tới việc Binding data trong WPF sử dụng một object đơn lẻ. Tuy nhiên khi chúng ta có một tập các Object cần binding, lúc đó đặt ra các yêu cầu về quản lý Object hiện thời, sắp xếp, lọc hay nhóm các object. Chúng ta thường gặp kiểu biding với list data này với các dữ liệu XML, Relation Database…
Ví dụ dưới đây hướng dẫn cách binding to List data, get Current Item và Navigate giữa các Item trong List.
Trước hết chúng ta khai báo một People class, là collection của Person class
public class People: List<Person>
{
public People(){ }
}
Trong Person class chúng ta thêm một phương thức khởi tạo, rỗng tham số. Điều này để thực hiện việc binding trong XAML
...
public Person() { }
...
Khi đó chúng ta sẵn sàng khai báo Collection trong XAML như sau:
<Window x:Class="ListDataBinding.Window1"
...
xmlns:local="clr-namespace:ListDataBinding">
<Window.Resources>
<local:People x:Key="Hyperlogy">
<local:Person x:Name="Nhat" FirstName="Nhat" LastName="Mai" FullName="Nhat Mai" />
<local:Person x:Name="Quang" FirstName="Quang" LastName="Nguyen" FullName="Quang Nguyen" />
<local:Person x:Name="Duc" FirstName="Duc" LastName="Le" FullName="Duc Le" />
</local:People>
</Window.Resources>
<Grid Name="grid" DataContext="{StaticResource Hyperlogy}">
...
<TextBox Height="23" Margin="95,9,12,0" Name="txtFirstName" VerticalAlignment="Top" Text="{Binding Path=FirstName}" />
<TextBox Margin="95,65,12,86" Name="txtLastName" Text="{Binding Path=LastName}" />
<TextBlock Height="21" Margin="95,0,12,59" Name="tblFullName" VerticalAlignment="Bottom" Text="{Binding Path=FullName}" />
...
</Grid>
</Window>
Để get Current Item chúng ta sử dụng ICollectionView và CurrentItem
...
ICollectionView view = GetCompanyView();
Person person = (Person)view.CurrentItem;
...
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
ICollectionView GetCompanyView()
{
People people = (People)this.FindResource("Hyperlogy");
return CollectionViewSource.GetDefaultView(people);
}
private void btnDisplay_Click(object sender, RoutedEventArgs e)
{
// Get the current person out of the collection view
ICollectionView view = GetCompanyView();
Person person = (Person)view.CurrentItem;
person.FullName = person.FirstName + txtMiddleName.Text + person.LastName;
MessageBox.Show(person.FullName);
}
private void btnNext_Click(object sender, RoutedEventArgs e)
{
ICollectionView view = GetCompanyView();
view.MoveCurrentToNext();
if (view.IsCurrentAfterLast)
{
view.MoveCurrentToLast();
}
}
private void btnBack_Click(object sender, RoutedEventArgs e)
{
ICollectionView view = GetCompanyView();
view.MoveCurrentToPrevious();
if (view.IsCurrentBeforeFirst)
{
view.MoveCurrentToFirst();
}
}
}
Kết quả
Không có nhận xét nào:
Đăng nhận xét