Tôi khá mới đối với WPF và cố gắng hiểu cách tốt nhất để mở rộng điều khiển ListBox
. Là trải nghiệm học tập, tôi muốn xây dựng một số ListBox
có ListBoxItem
s hiển thị CheckBox
thay vì chỉ văn bản. Tôi nhận được rằng làm việc trong một thời trang cơ bản bằng cách sử dụng các ListBox.ItemTemplate
, rõ ràng thiết lập tên của các thuộc tính tôi muốn databind đến. Một ví dụ là giá trị một ngàn chữ, như vậy ...Cách tạo ListBox.ItemTemplate có thể tái sử dụng/generic
Tôi đã có một đối tượng tùy chỉnh cho liên kết dữ liệu:
public class MyDataItem {
public bool Checked { get; set; }
public string DisplayName { get; set; }
public MyDataItem(bool isChecked, string displayName) {
Checked = isChecked;
DisplayName = displayName;
}
}
(. Tôi xây dựng một danh sách những người và thiết lập ListBox.ItemsSource
vào danh sách đó) Và tôi XAML trông giống như sau:
<ListBox Name="listBox1">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=Checked}" Content="{Binding Path=DisplayName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Tác phẩm này. Nhưng tôi muốn làm cho mẫu này có thể tái sử dụng được, tức là tôi sẽ muốn liên kết với các đối tượng khác với các thuộc tính khác với "Đã kiểm tra" và "Tên hiển thị". Làm cách nào tôi có thể sửa đổi mẫu của mình sao cho tôi có thể biến nó thành tài nguyên, sử dụng lại nó trên nhiều trường hợp ListBox
và cho từng trường hợp, ràng buộc IsChecked
và Content
với tên thuộc tính tùy ý?
Tôi không nghĩ điều này là có thể. Để có được "kiểm tra" ràng buộc được linh hoạt, bạn sẽ phải phân lớp ListBox và thêm một CheckedMemberPath như DisplayMemberPath. Không thể làm điều này chỉ với một mẫu. –
Đó là điều tôi sợ. Tôi đã bắt đầu tìm kiếm trong ListBox phân lớp, nhưng tôi vẫn đọc những thứ về cách các mẫu đáng kinh ngạc và cách bạn nên tránh các lớp con nếu nó hoàn toàn có thể thực hiện những gì bạn muốn với một khuôn mẫu. Tôi đoán đây có thể là một trường hợp tốt cho một phân lớp. Cảm ơn! –