2015-10-26 31 views
18

Bất kỳ ai cũng có thể giải thích ItemTemplate.DataTemplateListView. Trong đoạn mã này. Tôi thực sự không hiểu khái niệm của Templates, nó sẽ được giúp đỡ đầy đủ nếu ai đó có thể đặt một số ánh sáng trên đó quá. tôi đã tìm đến câu hỏi này:Cách sử dụng ListView trong Nền tảng Windows phổ biến (ứng dụng Windows 10)

Metro app: ListView ItemTemplate DataTemplate for selected item

Nhưng vẫn còn lúng túng. Cảm ơn bạn! :(

<ListView Margin="10" Name="lvDataBinding"> 
    <ListView.ItemTemplate> 
      <DataTemplate> 
       <WrapPanel> 
        <TextBlock Text="Name: " /> 
        <TextBlock Text="{Binding Name}" FontWeight="Bold" /> 
        <TextBlock Text=", " /> 
        <TextBlock Text="Age: " /> 
        <TextBlock Text="{Binding Age}" FontWeight="Bold" /> 
        <TextBlock Text=" (" /> 
        <TextBlock Text="{Binding Mail}" TextDecorations="Underline" Foreground="Blue" Cursor="Hand" /> 
        <TextBlock Text=")" /> 
        </WrapPanel> 
      </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

Trả lời

46

ListView là một điều khiển cho phép bạn tự động hiển thị một danh sách các mục để người dùng có thể di chuyển qua rằng danh sách các mục để xem họ và tìm thấy bất cứ điều gì họ có thể cần. Nó thực sự đơn giản để định nghĩa nó trong XAML:.

<ListView x:Name="StudentsList" /> 

Bây giờ, giả sử bạn có một danh sách các sinh viên đại học Mỗi học sinh được thể hiện với một class Student đơn giản

public class Student 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 

có c. có thể là hàng chục, hàng trăm hoặc hàng ngàn sinh viên, vì vậy bạn không thể xác định giao diện người dùng tĩnh. Bạn thường giữ cho những sinh viên đó trong một số loại danh sách/bộ sưu tập nào đó ở phía sau mã. Bạn lấy chúng từ các nguồn khác nhau - cơ sở dữ liệu, dịch vụ web, hoặc mã hóa cứng nó, như tôi sẽ làm gì bây giờ cho các mục đích giới thiệu:

private List<Student> listOfStudents = new List<Student>(); 

public MainPage() 
{ 
    this.InitializeComponent(); 

    listOfStudents.Add(new Student { Name = "John", Age = 20 }); 
    listOfStudents.Add(new Student { Name = "Bob", Age = 21 }); 
    listOfStudents.Add(new Student { Name = "Steve", Age = 19 }); 
    listOfStudents.Add(new Student { Name = "Marko", Age = 18 }); 
    listOfStudents.Add(new Student { Name = "Igor", Age = 20 }); 
    listOfStudents.Add(new Student { Name = "Ivan", Age = 20 }); 
    listOfStudents.Add(new Student { Name = "Nina", Age = 21 }); 
    listOfStudents.Add(new Student { Name = "Paul", Age = 20 }); 
    listOfStudents.Add(new Student { Name = "Ana", Age = 23 }); 
    listOfStudents.Add(new Student { Name = "Ivana", Age = 20 }); 

    StudentsList.ItemsSource = listOfStudents; 
} 

Danh sách đó/bộ sưu tập đóng vai trò như một nguồn mục cho ListView, vì vậy bạn thiết lập thuộc tính ItemsSource của ListView để kết nối hai và hiển thị danh sách trong giao diện người dùng. Sử dụng một ListView tất cả các mục được trả tự động bất kể số lượng các mục.

Nếu chúng ta chạy ứng dụng bây giờ, nó sẽ là khá xấu xí mặc dù:

Ugly ListView

Bạn cần phải xác định một DataTemplate để làm cho nó đẹp hơn. Vì mỗi học sinh đều có tên và tuổi, bạn sẽ muốn sử dụng những đặc tính đó để làm cho nó đẹp hơn. Điều này DataTemplate được gán cho ListView.ItemTemplate thuộc tính và ListView sẽ sử dụng nó cho mỗi và mọi mục trong danh sách.

<ListView x:Name="StudentsList"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBlock Text="{Binding Name}" 
          Margin="20,0,20,8" 
          FontSize="24" 
          FontStyle="Italic" 
          FontWeight="SemiBold" 
          Foreground="DarkBlue" /> 
       <TextBlock Text="{Binding Age}" 
          Margin="20,0,20,8" 
          FontSize="16" 
          Foreground="DarkGray" 
          Opacity="0.8" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

Xem, tôi đã sử dụng DataTemplate để xác định mà tài sản để hiển thị và làm thế nào để làm cho họ - Tôi chơi với cỡ chữ, màu chữ, lề vv Tôi sẽ thừa nhận đây không phải là thực sự là đẹp, nhưng tôi chắc chắn bạn sẽ nhận được điểm:

A bit prettier ListView

một điều nữa bạn sẽ nhận thấy là tôi sử dụng một ràng buộc xây dựng như thế này:

<TextBlock Text="{Binding Name}" ... /> 

basica này lly có nghĩa là: Kiểm tra xem đối tượng có thuộc tính Name và nếu có, hãy hiển thị đối tượng đó là TextBlock.Text.

Lưu ý rằng mọi thứ có thể trở nên phức tạp hơn để bạn có thể sử dụng các mẫu khác nhau cho các mục khác nhau trong một danh sách, v.v ... nhưng không nằm trong phạm vi câu hỏi mà tôi nghĩ.

TLDR: ListView tự động hiển thị danh sách các mục. ItemsSource xác định nguồn mục cho rằng ListView. DataTemplate xác định mẫu sẽ được sử dụng để hiển thị nội dung nào đó. Điều này DataTemplate được gán cho ItemTemplate thuộc tính của ListView để ListView biết rằng nó nên sử dụng chính xác mẫu đó để hiển thị các mục của nó.

+0

Tuyệt vời! Cảm ơn Allot. –

+0

Tên "MenuItem" không tồn tại trong không gian tên "sử dụng SoundDemo.Model" .Là một lỗi rất bình thường mà tôi tiếp tục nhận được và ở đây tôi cũng hiểu được lỗi, Nếu tôi điều chỉnh lại và thử khôi phục xung đột tôi vẫn có thể 't giải quyết vấn đề. [Bất kỳ đề xuất nào về phần này?] –

+0

Chế độ xem danh sách phải có thể cuộn được mặc định là không may. –

Các vấn đề liên quan