Я довольно новичок в WPF и пытаюсь понять, как лучше всего расширить элемент управления ListBox
. В качестве учебного опыта я хотел построить ListBox
, где ListBoxItem
s отображает CheckBox
вместо простого текста. Я получил базовую работу, используя ListBox.ItemTemplate
, явно задав имена свойств, которые мне нужны для привязки данных. Пример стоит тысячи слов, так что ...Как сделать ListBox.ItemTemplate многоразовым/общим
У меня есть пользовательский объект для привязки данных:
public class MyDataItem {
public bool Checked { get; set; }
public string DisplayName { get; set; }
public MyDataItem(bool isChecked, string displayName) {
Checked = isChecked;
DisplayName = displayName;
}
}
(. Я строю список тех, и установить ListBox.ItemsSource
в этот список), и мой XAML выглядит так:
<ListBox Name="listBox1">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=Checked}" Content="{Binding Path=DisplayName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Это работает. Но я хочу сделать этот шаблон многоразовым, т. Е. Мне захочется привязать к другим объектам свойства, отличные от «Проверено» и «DisplayName». Как изменить шаблон, чтобы я мог сделать его ресурсом, повторно использовать его на нескольких экземплярах ListBox
, и для каждого экземпляра привяжите IsChecked
и Content
к произвольным именам свойств?
Я не думаю, что это возможно. Чтобы привязка «Проверено» была гибкой, вам придется подклассифицировать ListBox и добавить CheckedMemberPath, как DisplayMemberPath. Нельзя делать это только с шаблоном. –
Вот чего я боялся. Я начал изучать подклассы ListBox, но я продолжал читать вещи о том, как невероятные шаблоны и как вам следует избегать подклассов, если вообще возможно выполнить то, что вы хотите с помощью шаблона. Я думаю, это может быть хорошим примером для подкласса. Благодаря! –