My Opera is closing 3rd of March

NAM GIÀ

CHÚ Ý: BLOG NAM GIÀ ĐÃ CHUYỂN SANG ĐỊA CHỈ http://namdh.wordpress.com

Silverlight 2 Tutorial - Dùng ListBox và DataBinding để hiển thị dữ liệu

,

Trong những bài trước chúng ta đã dùng DataGrid để hiển thị kết quả tìm kiếm. DataGrid có thể chạy tốt khi chúng ta muốn hiển thị nội dung theo dạng một cột. Tuy nhiên đối với ứng dụng Digg, chúng ta muốn chỉnh sửa thêm giao diện một chút để nó trông giống một List hơn là một DataGrid. Một tin tốt lành là điều này tương đối dễ dàng - và nó không đòi hỏi chúng ta phải thay đổi bất kỳ đoạn lệnh nào.

Chúng ta sẽ bắt đầu bằng việc thay thế DataGrid bằng một <ListBox>. Chúng ta sẽ vẫn giữ lại tên cũ như trước đây (StoriesList):

Khi chạy và thực hiện việc tìm kiếm, ListBox vừa thêm vào sẽ hiển thị kết quả như sau:
Bạn có thể sẽ tự hỏi - tại sao các dòng đều là "DiggSample.DiggStory"? Lý do là vì chúng ta đã gắn các đối tượng DiggStory vào ListBox (và mặc nhiên nó sẽ gọi các hàm ToString() trên các dối tượng này). Nếu chúng ta muốn hiển thị giá trị của thuộc tính Title của đối tượng DiggStory, chúng ta có thể đặt giá trị cho thuộc tính DisplayMemberPath của ListBox:

Khi chạy bạn sẽ thấy Title sẽ được hiển thị lên TextBox:

Nếu chúng ta muốn hiển thị nhiều hơn một giá trị, hay tùy biến lại dạng hiển thị của mỗi mục dữ liệu, chúng ta có thể viết lại ItemTemplate của ListBox để cung cấp một DataTemplate. Bên trong DataTemplate này, chúng ta sẽ tùy biến lại cách các đối tượng DiggStory hiển thị dữ liệu.
Lấy ví dụ, chúng ta có thể hiện thị cả Title và NumDiggs bằng cách dùng DataTemplate giống như dưới đây:

Chúng ta có thể gắn bất kỳ thuộc tính public nào chúng ta muốn từ đối tượng DiggStory bên trong DataTemplate. Hãy để ý cách chúng ta dùng cú pháp {Binding PropertyName} để thực hiện điều này với hai control TextBlock.
Với DataTemplate được khai báo như trên, giờ ListBox của chúng ta sẽ hiển thị các thành phần như dưới đây:

Thêm một bước nữa, chúng ta sẽ thay đổi DataTemplate như dưới đây. DataTemplate này dùng hai StackPanel - một để sắp các dòng theo chiều ngang, và một để sắp các các khối văn ban theo chiều dọc.

DataTemplate ở trên sẽ làm ListBox của chúng ta hiển thị các mục giống màn hình dưới đây:

Khi định nghĩa thêm các quy tắc Style sau đây trong file App.xaml (nhớ rằng chúng ta đang dùng LinearGradientBrush để tạo nền đổ màu vàng trên DiggPanel):

Một điều quan trọng cần phải nhắc về ListBox là - dù bạn có tùy biến các mục dữ liệu như thế nào đi nữa, nó vẫn cung cấp các chức năng hover và chọn mục dữ liệu một cách tự động. Điều này đúng cho cả việc sử dụng chuột lẫn bàn phím (các phím up/down, home/end...):
ListBox cũng hỗ trợ thay đổi kích thước các dòng - và sẽ tự động cuộn nội dung của chúng ta nếu cần (nhớ rằng thanh cuộn ngang sẽ xuất hiện nếu chiều rộng cửa sổ nhỏ hơn chiều rộng nội dung)

Bước tiếp theo
Chúng ta đã chuyển sang dùng List, và đã dọn dẹp nội dung hiển thị bên trong. Giờ hãy cố gắng hoàn thiện các chức năng của chương trinh thêm một chút, và xây dựng khả năng hiển thị theo kiểu master/detail cho phép người dùng xem ngay một câu chuyện ngay khi họ chọn nó trong danh sách. Để làm điều đó, xin mời xem phần tiếp theo: Dùng User Control để cho phép xem theo dạng Master/Detail.

Blog Nam Già lại tiếp tục dẫn đầu kết quả tìm kiếm với Silverlight 2 :)Chỉ là một chút xao lòng! - Phần 1

Comments

namtuoctuxedo Saturday, March 8, 2008 4:30:28 AM

Em nhớ sư phụ ghê, yêu cầu thấy upload một cái Image lên để trò chiêm ngưỡng dung nhan thầy nào

Unregistered user Monday, June 2, 2008 10:57:29 AM

Anonymous writes: Chào thầy , hiện em đang làm thử các ví dụ mà thầy đã viết ... Nhưng em có 1 số thắc mắc nhỏ mong thầy hướng dẫn thêm trong void DisplayStories lấy attribute của story .... thì ListBox display nội dung được nhưng nếu là element của story thì Listbox không display .. trong khi đó datagrid vẩn display bình thường nội dung của attribute hay element ngoài trừ element("thumbnail") element("thumbnail") là 1 kiểu của image nhưng em lại không lấy giá trị đưộc ... Làm sao để cho client biết khi nào là lấy attribute khi nào là element ?? .... Mong thầy hướng dẫn Chúc thầy có 1 tuần tốt đẹp :d

Unregistered user Wednesday, June 4, 2008 3:20:30 PM

oni183 writes: Thêm ThumbNail=(string)story.Element("thumbnail").Attribute("src") là ok .Thuộc tính Source của thẻ Image không display dc control HTML nên phải lấy đúng src. Thank bác Nam luôn ! những bài học thật bổ ích.
February 2014
M T W T F S S
January 2014March 2014
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28