2017-01-19 6 views
0

Я хочу связать items из list в пределах list.Список привязки данных в списке

Мои три модели:

public class Course 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public List<Module> Modules { get; set; } 
} 

public class Module 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public List<Discipline> Disciplines { get; set; } 
} 

public class Discipline 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
} 

У меня есть страница со списком курсов и передавать данные на другую страницу с этим курсом, чтобы посмотреть некоторые детали, на этой странице технических подробностей я установить BindingContext в BindingContext = _course.Module в _course Я получаю данные о клике.

Мой справки, что теперь я хочу, чтобы отобразить список дисциплин, сгруппированных по модулю

Я попробовать что-то вроде:

<ListView ItemsSource="{Binding .}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <TextCell Text="{Binding Disciplines}" /> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

или:

<ListView ItemsSource="{Binding Disciplines}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <TextCell Text="{Binding Title}" /> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

, но мой список всегда показывает пустое вы могли бы, ребята, одолжить мне га й?

+0

Что такое связующий контекст 2-й страницы? – Jason

+0

Вам нужно будет изменить источник привязки, чтобы указать на что-то другое, кроме DataContext по умолчанию. Посмотрите на использование привязки 'ElementName' или' RelativeSource'. Любой из них должен работать, хотя то, что вы используете, зависит от вашей структуры пользовательского интерфейса и предпочтений. – Rachel

ответ

0

я выложу мой обходной путь для, если у кого-то проблемы с этим, но если кто-нибудь знает лучшее решение может разместить его

я сделал отдельный класс

public class GroupedDisciplines : ObservableCollection<Disciplines> 
{ 
    public string Title { get; set; } 

    public static ObservableCollection<GroupedDisciplines> CreateGroup (ObservableCollection<Module> module) 
    { 
     var group = new GroupedDisciplines(); 
     var colection = new ObservableCollection<GroupedDisciplines>(); 
     foreach (Module m in module) 
     { 
      group = new GroupedDisciplines() { Title = m.Title }; 
      foreach (Discipline d in module.SelectMany(x => x.Disciplines)) 
      { 
       group.Add(d); 
      } 
      colection.Add(group); 
     } 

     return colection; 
    } 
} 

и на представлении я установить BindingContext (или х: Name.ItemsSource) для

listView.ItemsSource = GroupedDisciplines.CriarGrupo(_modules); 
0

Чтобы отобразить список дисциплин как список текста, вы можете использовать ListView в качестве шаблона данных в представлении первого списка и привязать дисциплины к этому представлению списка шаблонов. Вы можете попробовать:

<ListView ItemsSource="{Binding}"> 
 
    <ListView.ItemTemplate> 
 
     <DataTemplate> 
 
      <ListView ItemsSource="{Binding Disciplines}"> 
 
      <ListView.ItemTemplate> 
 
       <DataTemplate> 
 
       <TextCell Text="{Binding Title}" /> 
 
       </DataTemplate> 
 
      </ListView.ItemTemplate> 
 
      </ListView> 
 
     </DataTemplate> 
 
    </ListView.ItemTemplate> 
 
</ListView>

+0

Когда я делаю это, я всегда получаю ошибку синтаксического анализа. То, что мне удалось сделать до сих пор, - это преобразовать список списков модулей в список дисциплин и установить его как ItemSource, но теперь я не могу группировать по модулю. Название – Alraune

+0

Исправление: исключение исключения из ItemsSource = "{Binding}". – Alraune