Проблема группировки Xamarin ListView - PullRequest
0 голосов
/ 10 сентября 2018

У меня проблемы с группировкой с использованием 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>

1 Ответ

0 голосов
/ 10 сентября 2018

В вашем методе GetTechEquipmentOverviewAsync вы сбрасываете наблюдаемую коллекцию TechEquipmentOverview, а UI не знает о новом списке.

Вам необходимо реализовать INotifyPropertyChanged в вашей ViewModel и уведомить пользовательский интерфейс, что ссылка на список изменилась. Также убедитесь, что вы уведомляете пользовательский интерфейс в основном потоке пользовательского интерфейса, используя Device.BeginInvokeOnMainThread.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...