@AndNovak

Как реализовать Hierarchicaldatatemplate в caliburn micro?

Подскажите пожалуйста как реализовать Hierarchicaldatatemplate в элементе TreeView. Элементы хотел бы добавлять динамически. Данные будут подгружаться из базы данных.
Во ViewModel получаю данные таким образом
public MainViewModel(,ContractService contractService )
        {
            _contraDataService = contractService;
            _contraDataService.GetData(
            (items, error) =>
            {
                contract = items;
            });

        }

Во View так:
<TreeView>
        <TreeView.ItemTemplate>
             <HierarchicalDataTemplate ItemsSource="{Binding Path=contract}">
                    <HierarchicalDataTemplate.ItemTemplate>
                          <DataTemplate>
                               <TreeViewItem ItemsSource="{Binding Path=product}" />
                           </DataTemplate>
                      </HierarchicalDataTemplate.ItemTemplate>
              </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
 </TreeView>

В результате TreeView не отображается вовсе. Подскажите, пожалуйста, где у меня ошибка.
  • Вопрос задан
  • 290 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Sumor
Наверно вы забыли у самого Treeview установить itemssource.
После установки в ItemsSource всех контрактов у вас они отобразятся, и у каждого будут отображены продукты из свойства product.
<TreeView>
        <TreeView.ItemTemplate>
             <HierarchicalDataTemplate ItemsSource="{Binding Path=product}">
                    <TextBlock Text="{Binding} />
              </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
 </TreeView>

Таким образом у вас в Treeview будут отображены и контракты и продукты.
Если вы хотите разные шаблоны для отображения каждого из объектов их нужно выбирать через templateselector или проще без указания TreeView.ItemTemplate в ресурсах задать два типизированных шаблона, что-то типа:
<HierarchicalDataTemplate DataType="{x:type l:product}">...

Что касается динамической подгрузки, то по-умолчанию TreeView загружает данные целиком. И поэтому у вас прогрузятся всё что будет отражено. Если вы хотите динамическую загрузку - читайте про виртуализацию. применительно к Treeview.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы