Добавьте кнопку в конце каждого заголовка группы в представлении списка форм xamarin. - PullRequest
0 голосов
/ 06 января 2020

У меня есть просмотр списка с шаблоном заголовка группы. Мне нужно добавить кнопку в конце каждой группы представления списка

Xaml:

<ListView x:Name="lvActivities" ItemsSource="{Binding LaborMiscTimeList}">
<ListView.GroupHeaderTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Grid Margin="8,8,8,8">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"></ColumnDefinition>
                                <ColumnDefinition Width="80"></ColumnDefinition>
                            </Grid.ColumnDefinitions>
                            <Label Text="{Binding Key}" FontSize="Medium" TextColor="Black" Grid.Column="0"/>
                        </Grid>
                    </ViewCell>
                </DataTemplate>
            </ListView.GroupHeaderTemplate>
 <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Grid Padding="5">
                            <Grid.RowDefinitions>
                                <RowDefinition Height="*"></RowDefinition>
                                <RowDefinition Height="*"></RowDefinition>
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="30"></ColumnDefinition>
                                <ColumnDefinition Width="*"></ColumnDefinition>
                                <ColumnDefinition Width="60"></ColumnDefinition>
                            </Grid.ColumnDefinitions>
                            <Label  Text="{Binding WorkDescription}" Grid.Row="0" Grid.Column="1" FontSize="20" VerticalOptions="Center"></Label>
                            <Label Text="{Binding TotalHours}"  Grid.Column="2" Grid.RowSpan="2" HorizontalOptions="Center"   TextColor="Black" VerticalOptions="Center"></Label>
                        </Grid>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
            <ListView.Footer>
                <Label/>
            </ListView.Footer>
</ListView>

Ниже приведен код, который я использую для группировки по дате:

var sorted = from miscTime in toBeGrouped
                     orderby miscTime.LaborDate descending
                     group miscTime by miscTime.LaborDate into miscTimeGroup
                     select new Grouping_Activities(miscTimeGroup.Key.ToString("MMM dd, yyyy"), miscTimeGroup);

public class Grouping_Activities : ObservableCollection<LaborMiscTime>
{
    public string Key { get; private set; }

    public Grouping_Activities(string key, IEnumerable<LaborMiscTime> items)
    {
        Key = key;
        if (items != null)
        {
            long totalHoursTicks = 0;
            TimeSpan timeSpan;
            TotalHours = TimeSpan.FromTicks(totalHoursTicks).ToString(@"hh\:mm");
        }

    }
}

Я попытался установить нижний колонтитул для сгруппированного списка, но, похоже, такой опции нет. Можно ли этого добиться?

1 Ответ

1 голос
/ 07 января 2020

Вы можете использовать CollectionView до , чтобы настроить нижний колонтитул группы в формах Xamarin:

Внешний вид каждого нижнего колонтитула группы можно настроить, задав свойство CollectionView.GroupFooterTemplate DataTemplate:

<CollectionView ItemsSource="{Binding Animals}"
                IsGrouped="true">
    ...
    <CollectionView.GroupFooterTemplate>
        <DataTemplate>
            <Button Text="{Binding Count, StringFormat='Total animals: {0:D}'}"
                   Command="{Binding ButtonCommand}"
                   Margin="0,0,0,10" />
        </DataTemplate>
    </CollectionView.GroupFooterTemplate>
</CollectionView>

В этом примере для каждого нижнего колонтитула группы задано значение Button, которое отображает количество элементов в группе. На следующих снимках экрана показан настроенный нижний колонтитул группы:

enter image description here

=================== ============== Update =================================== ==

Вы можете использовать Команду кнопки , чтобы связать событие нажатия в ViewModel. Во-первых, добавив Command в ViewModel:

public ICommand ButtonCommand { private set; get; }

public class AnimalGroup : List<Animal>
{
    public string Name { get; private set; }

    public ICommand ButtonCommand { private set; get; }


    public AnimalGroup(string name, List<Animal> animals) : base(animals)
    {
        Name = name;
        ButtonCommand = new Command( () => {
            Console.WriteLine("---------"+Name);
        });
    }

    public override string ToString()
    {
        return Name;
    }
}

Затем добавив Command="{Binding ButtonCommand}" для Button in Xaml.

Эффект:

enter image description here

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