У меня проблемы с группировкой с использованием ListView в Xamarin.Я посмотрел больше руководств, чем могу сосчитать, но все еще не могу заставить его работать.Я вижу, что свойство ViewModel устанавливается правильно, но все, что я получаю, это пустой экран.Пожалуйста, не отвечайте со ссылкой на другое руководство, поскольку я, вероятно, уже посмотрел на него, и это не помогло.Я считаю, что я очень близок.
Домен класса:
public class TechInventoryDetail
{
public int EquipmentInventoryDetailEntityId { get; set; }
public int TechId { get; set; }
public string CodeDetail { get; set; }
public string CodeDescription { get; set; }
public int Need { get; set; }
public int Have { get; set; }
public string ServiceCategory { get; set; }
}
Свойство модели представления:
private ObservableRangeCollection<Models.Grouping<string, TechInventoryDetail>> _techEquipmentOverview = new ObservableRangeCollection<Models.Grouping<string, TechInventoryDetail>>();
public ObservableRangeCollection<Models.Grouping<string, TechInventoryDetail>> TechEquipmentOverview
{
get => _techEquipmentOverview;
set { _techEquipmentOverview = value; RaisePropertyChanged(); }
}
Установка с использованием метода модели представления:
public async Task GetTechEquipmentOverviewAsync()
{
var result = await _techService.GetTechEquipmentOverviewAsync(false);
if (result.Success)
{
var equipmentGrouped = result.Data.InventoryDetail.GroupBy(c => c.ServiceCategory, c => c);
var groups = equipmentGrouped.Select(g => new Models.Grouping<string, TechInventoryDetail>(g.Key, g)).ToList();
if (groups.Any())
{
TechEquipmentOverview = new ObservableRangeCollection<Models.Grouping<string, TechInventoryDetail>>();
TechEquipmentOverview.AddRange(groups);
}
}
}
Xaml ListView:
<ListView HasUnevenRows="true"
IsGroupingEnabled="true"
GroupDisplayBinding="{Binding Key}"
ItemsSource="{Binding TechEquipmentOverview}">
<ListView.GroupHeaderTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.View>
<StackLayout Padding="0,5,0,5" Orientation="Vertical">
<Label
HorizontalTextAlignment="Center"
Style="{StaticResource EquipmentGroupHeader}"
Text="{Binding Key}" />
</StackLayout>
</ViewCell.View>
</ViewCell>
</DataTemplate>
</ListView.GroupHeaderTemplate>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid Padding="5">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.Children>
<Label
Grid.Row="0"
Grid.ColumnSpan="4"
HorizontalTextAlignment="Center"
LineBreakMode="TailTruncation"
Style="{StaticResource DefaultSectionHeader}"
Text="{Binding CodeDetail}" />
<Label
Grid.Row="1"
Grid.Column="0"
Grid.ColumnSpan="2"
Margin="0,5,5,5"
Style="{StaticResource H1}"
Text="Need" />
<Label
Grid.Row="2"
Grid.Column="0"
Grid.ColumnSpan="2"
Margin="0,15,5,5"
LineBreakMode="TailTruncation"
Style="{StaticResource H2}"
Text="{Binding Need}" />
<Label
Grid.Row="1"
Grid.Column="2"
Grid.ColumnSpan="2"
Margin="0,5,5,5"
Style="{StaticResource H1}"
Text="Have" />
<Label
Grid.Row="2"
Grid.Column="2"
Grid.ColumnSpan="2"
Margin="0,15,5,5"
LineBreakMode="TailTruncation"
Style="{StaticResource H2}"
Text="{Binding Have}" />
</Grid.Children>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>