2012-04-19 41 views
5

Tôi đang cố gắng tạo một ItemsControl được tính phí hiển thị các mục khác nhau được sắp xếp theo siêu dữ liệu. Mỗi mục có thể có nhiều siêu dữ liệu. Ví dụ: một mục thuộc loại "Cuộc hội thoại" có thể có siêu dữ liệu "Chương", "Hành động" và "Âm lượng".WPF - Kiểu nhóm: Chúng tôi có thể chỉ liên kết với thuộc tính "Tên" không?

Sau khi tìm kiếm cách nhóm hoạt động trong WPF, tôi đã tìm hiểu về GroupStyles và lớp PropertyGroupDescription.

Tôi đã tạo lớp của riêng mình kế thừa từ PropertyGroupDescription và trả về một đối tượng thuộc loại "Siêu dữ liệu".

Có anyway trong GroupContty của tôi DataStyplate DataTemplate tôi có thể liên kết với đối tượng trả về (ví dụ: "Metadata" đối tượng) và sau đó hiển thị thuộc tính của nó như tôi muốn? Hay tôi buộc phải liên kết với "Tên"?

Nói cách khác:

<ItemsControl.GroupStyle> 
    <GroupStyle> 
     <GroupStyle.HeaderTemplate> 
      <DataTemplate> 
        Am I forced to bind to "Name" here ? 
      </DataTemplate> 
     </GroupStyle.HeaderTemplate> 
    </GroupStyle> 
</ItemsControl.GroupStyle> 

Trả lời

13

Theo mặc định DataContext trong GroupStyle bạn có thể liên kết với CollectionViewGroup Properties này. Nhưng tất nhiên bạn có thể đặt bất kỳ BindingSource nào khác nếu bạn cần.

Nếu bạn muốn đối tượng đầu tiên trong sử dụng nhóm của bạn:

<TextBlock Text="{Binding Path=Items[0].YourStringProperty}" /> 
+1

Nhưng Items là mảng của các mặt hàng và không của đối tượng GroupDescription. I E. thuộc tính 'Metadata' vẫn không thể truy cập được? – Dani

0

Theo mặc định khi thực hiện liên kết với các đối tượng tùy chỉnh, nó sẽ cố gắng hiển thị bằng phương pháp của nó ToString(), không phải là Tên (tốt, ToString() được in tên của mặc định anyway). Bạn có thể thử ghi đè phương thức ToString() để in một thứ khác, bạn sẽ thấy ý tôi là gì.

Nhưng tất nhiên bạn có thể xác định DataTemplate của riêng bạn và liên kết với thuộc tính khác.

<DataTemplate> 
<TextBlock Text="{Binding XXXXX}"/> 
</DataTemplate> 
Các vấn đề liên quan