У меня есть ListBox, чей ItemSource является ObjectDataProvider, который является экземпляром ObservableCollection. ObservableCollection - это коллекция ObservableCollections. ItemTemplate ListBox - это DataTemplate, который создает ListBox для каждого элемента списка. Чтобы проиллюстрировать это лучше, я пытаюсь воссоздать карточную игру в WPF. В принципе, из рук карт вы можете создавать книги. После того, как у вас есть действующая книга, вы можете выбрать книгу, которая войдет в ObservableCollection of Books. Проблема, с которой я столкнулась, состоит в том, что каждый элемент ListBox является ListBox, у которого есть ItemSource, который является Книгой, то есть ObservableCollection of Cards. Я не думаю, что у меня проблема с источником или шаблоном внешнего ListBox, но мне трудно понять, как я собираюсь установить источник элементов ListBox в коллекцию карт для каждый книга. По сути, мой вопрос может быть запутанным и сложным понятием, но по сути я пытаюсь понять, как использовать ListBox в шаблоне, который станет шаблоном другого ListBox. Если кто-нибудь знает, как подойти к этому, я был бы очень признателен за это.WPF: используйте ListBox в шаблоне, который будет шаблоном другого ListBox
ответ
С карты, как следующее:
public class Card
{
private string _name;
public Card(string name)
{
_name = name;
}
public string Name
{
get { return _name; }
set { _name = value; }
}
}
и книги, как следующее:
public class Book
{
private readonly ObservableCollection<Card> _cards;
public Book(ObservableCollection<Card> cards)
{
_cards = cards;
}
public ObservableCollection<Card> Cards
{
get { return _cards; }
}
}
Затем создайте ListBox в окне:
<ListBox
ItemsSource="{Binding ElementName=Window, Path=Books}"
ItemTemplate="{StaticResource MainListTemplate}" />
и в ресурсах для окно:
<Window.Resources>
<ResourceDictionary>
<DataTemplate
x:Key="InsideListTemplate">
<TextBlock
Text="{Binding Name}" />
</DataTemplate>
<DataTemplate
x:Key="MainListTemplate">
<ListBox
ItemsSource="{Binding Cards}"
ItemTemplate="{StaticResource InsideListTemplate}" />
</DataTemplate>
</ResourceDictionary>
</Window.Resources>
В вашем ListBox используется MainListTemplate, который содержит ListBox. Элемент ItemsSource для этого ListBox - это ваш список карт, а ItemTemplate - это InsideListTemplate. У меня это как простой TextBlock, но вы можете делать все, что вам нужно.
Не помещайте ListBox внутри ListBox, это создаст очень запутанный интерфейс, потому что у вас будет несколько «уровней» выбранных элементов.
Вы можете поместить элемент ItemsControl внутри ListBox, если вам нужен один ListBox с коллекцией внутри каждого элемента или ListBox внутри элемента ItemsControl, если вам нужно несколько списков.
Благодарим за ответы. Хотя я согласен с обоими ответами и всегда ценю, что меня уведомляют о плохой практике кодирования, первый ответ сделал трюк. У меня возникла проблема с ItemsSource ListBox в моей DataTemplate. Где-то по пути обучения WPF я стал подключаться к ObjectDataProvider (s) как к элементу ItemsSource. Поскольку ObjectDataProvider был только экземпляром коллекции, и когда я обновляю его, источником карточек для всех моих «Книг» будет то же самое. Изменение моего источника привязки ItemsSource непосредственно к наблюдаемой коллекции «Карты» сделало трюк.
Хотя это может быть запутанным в отношении пользовательского интерфейса, я не уверен, что я собираюсь даже разрешить выбор элементов в любом из списков. Мои намерения были просто для визуального представления книг игроков. Мне может потребоваться, чтобы элементы внешнего списка были выбраны, чтобы переместить карты из книги и обратно в основную руку, но я пока не уверен.
Еще раз спасибо за помощь.
Thanks, Brandon
- 1. WPF Listbox добавить элемент с шаблоном
- 2. Проблема с шаблоном ListBox
- 3. Идентификация кнопки в шаблоном ListBox
- 4. WPF DropShadowEffect в ListBox
- 5. Multicolumn ListBox в WPF
- 6. Пользовательские ListBox в WPF
- 7. Перетаскивание ListBox для WPF
- 8. BInding для Listbox в WPF
- 9. WPF анимация в ListBox
- 10. Сортировка ListBox в WPF
- 11. Пользовательский ListBox в WPF
- 12. Filtered WPF ListBox
- 13. WPF ListBox Conditional DisplayMemberPath
- 14. WPF ListBox, который может сортировать по столбцу
- 15. WPF - ListBox с scrollBar, который нельзя щелкнуть
- 16. WPF перетаскивания ListBox
- 17. WPF Listbox прокрутка вниз
- 18. WPF ListBox insert
- 19. listbox dragdrop in wpf
- 20. WPF listbox empty datatemplate
- 21. Listbox ScrollIntoView problem wpf
- 22. ListBox итерация WPF
- 23. Групповая панель WPF ListBox
- 24. WPF Listbox не перерисовки
- 25. WPF ListBox ListBoxItem Binding
- 26. WPF ListBox Selection Color
- 27. Wpf listbox resize issue
- 28. WPF ListBox selection issue
- 29. WPF Listbox не освежает
- 30. WPF-ListBox-Multibind Howto