Невозможно связать список элементов в столбце GridView
Я создаю приложение, которое показывает пользователю живой результат серии матчей. Я настраиваю структуру данных следующим образом:Countries->Leagues->Matches
В частности, во ViewModel я создал наблюдаемую коллекцию стран следующим образом:
private ObservableCollection<Models.Country> _countries = new ObservableCollection<Models.Country>();
public ObservableCollection<Models.Country> Country
{
get { return _countries; }
}
и модель:
public class Country
{
public string Name { get; set; }
public List<League> League { get; set; }
}
public class League
{
public string Name { get; set; }
public List<Event> Event { get; set; }
}
класс Event содержит свойства каждого события, в частности название события, дату и т. д.
Я ценю эти данные следующим образом:
Country country = new Country();
country.Name = "Italy";
League league = new League();
league.Name = "Serie A";
League league2 = new League();
league2.Name = "Serie B";
Event @event = new Event();
@event.MatchHome = "Inter";
Event event2 = new Event();
@event.MatchHome = "Milan";
league.Event = new List<Event>();
league2.Event = new List<Event>();
league.Event.Add(@event);
league2.Event.Add(event2);
country.League = new List<League>();
country.League.Add(league);
country.League.Add(league2);
lsVm.Country.Add(country); //lsVm contains the ViewModel
Как вы можете видеть, я создаю объект под названиемcountry
(Италия), который будет содержать в этом случае две лиги (Серия A) и (Серия B). Каждая лига содержит один матч на самом деле в игреSerie A -> Inter
а такжеSerie B -> Milan
Я добавляю лигу две страны и, наконец, страну к наблюдаемой коллекции в модели представления. Пока здесь нет проблем. Проблема в XAML.
Итак, я организовал все эти вещи внутри GroupViews, для этого я использую CollectionViewSource, в частности:
<CollectionViewSource Source="{Binding Country}" x:Key="GroupedItems">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Name" />
<PropertyGroupDescription PropertyName="League.Name" />
</CollectionViewSource.GroupDescriptions>
приведенный выше код находится в моем Window.Resources, и передайте CollectionViewSource команду организовать для названия страны и названия лиг соответствующие лиги. У меня есть два ListView как это:
<ListView ItemsSource="{Binding Source={StaticResource GroupedItems}}" Name="Playing">
<ListView.View>
<GridView>
<GridViewColumn Header="Date" Width="150" DisplayMemberBinding="{Binding Path = League.Event.MatchDate}"/>
<GridViewColumn Header="Minutes" Width="70" DisplayMemberBinding="{Binding Path = League.Event.MatchMinute}"/>
<GridViewColumn Header="Home" Width="150" DisplayMemberBinding="{Binding Path = League.Event.MatchHome}"/>
<GridViewColumn Header="Score" Width="100" DisplayMemberBinding="{Binding Path = League.Event.MatchScore}"/>
<GridViewColumn Header="Away" Width="150" DisplayMemberBinding="{Binding Path = League.Event.MatchAway}"/>
</GridView>
</ListView.View>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Expander IsExpanded="True" Background="#4F4F4F" >
<Expander.Header>
<StackPanel Orientation="Horizontal" Height="22">
<TextBlock Text="{Binding Name}" FontWeight="Bold" Foreground="White" FontSize="22" VerticalAlignment="Bottom" />
<TextBlock Text="{Binding ItemCount}" FontSize="22" Foreground="Orange" FontWeight="Bold" FontStyle="Italic" Margin="10,0,0,0" VerticalAlignment="Bottom" />
<TextBlock Text=" Leagues" FontSize="22" Foreground="White" FontStyle="Italic" VerticalAlignment="Bottom" />
</StackPanel>
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
GroupStyle содержит лиги, которые будут содержать каждый матч, теперь проблема в том, что я не вижу ни одной лиги и любого матча, потому что этот элемент находится внутри списка. Поэтому для отображения их я должен написать в xaml этот код:
<PropertyGroupDescription PropertyName="League[0].Name" />
это исправляет ошибку имени лиги, отображаемую в GroupStyle и в GridView:
<GridViewColumn Header="Casa" Width="150" DisplayMemberBinding="{Binding Path = League[0].Event[0].MatchHome}"/>
но это, конечно, будет отображать только конкретный элемент .. не список элементов. Мне нужна помощь, чтобы исправить эту ситуацию, я не могу понять. Благодарю.