Tôi cần phải tạo kiểu cho các mục đầu tiên và cuối cùng của chế độ xem danh sách khác nhau. Để đạt được điều đó, tôi bắt đầu làm việc trên một giải pháp dựa trên câu trả lời đó: Use different template for last item in a WPF itemscontrolMẫu mục riêng biệt cho mục đầu tiên và cuối cùng trong một ListView
Về cơ bản, tôi có một tùy chỉnh ItemsTemplateSelector quyết định áp dụng mẫu dựa trên chỉ mục của mục trong các mục xem danh sách (mã bên dưới).
Nó hoạt động đúng cách ngoại trừ khi danh sách được cập nhật (một mục được thêm hoặc loại bỏ), các mẫu không được chọn lại (ví dụ, ban đầu, SingleItemTemplate được chọn vì có một mục duy nhất. một mục vào danh sách, mẫu của mục đầu tiên không được chuyển sang FirstItemTemplate). Làm cách nào để buộc chọn mẫu cho tất cả các mục?
public class FirstLastTemplateSelector : DataTemplateSelector
{
public DataTemplate DefaultTemplate { get; set; }
public DataTemplate FirstItemTemplate { get; set; }
public DataTemplate LastItemTemplate { get; set; }
public DataTemplate SingleItemTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
ListView lv = VisualTreeHelperEx.FindParentOfType<ListView>(container);
if (lv != null)
{
if (lv.Items.Count == 1)
{
return SingleItemTemplate;
}
int i = lv.Items.IndexOf(item);
if (i == 0)
{
return FirstItemTemplate;
}
else if (i == lv.Items.Count - 1)
{
return LastItemTemplate;
}
}
return DefaultTemplate;
}
}
Tôi tự hỏi tại sao bạn chưa so sánh bằng Ràng buộc của DataTrigger để ItemsCount và Giá trị cho AlternationCount? Có phải vì ItemCount không phải là một thuộc tính phụ thuộc và nó sẽ ném lỗi? Hoặc có lý do nào khác không? Bởi vì tôi thấy nó sẽ là một boolean bằng so sánh và tại sao chúng ta cần một công cụ chuyển đổi – CarbineCoder
@ ramb00 Tôi đã thử và nhận: "A 'Binding" không thể được đặt trên thuộc tính' Giá trị 'của loại' DataTrigger '" . Có vẻ như Value không phải là một dependencyProp. –