Xamarin: индексирование по вертикали (список переходов) для сгруппированного списка в формах Xamarin для Android и Windows UWP

Я разработал сгруппированный вид списка в формах Xamarin для платформы ios, android и windows. Вертикальная индексация (список переходов) появляется автоматически в IOS, когда я устанавливаю свойство GroupShortNameBinding в моем представлении списка. Но список переходов не появляется в Android. Как я могу получить поддержку вертикальной индексации в Android и Windows также с помощью пользовательского рендеринга. Если кто-то может предоставить источник пользовательского рендеринга с поддержкой этой функции кросс-платформенный.

Ответы на вопрос(1)

если вы не хотите использовать CustomRenders.

Вы можете обернуть свой ListView в RelativeLayout с высотой и шириной, равными родителю (страница содержимого).

Для представления списка используйте высоту как родителя и ширину 90% от родителя. Добавьте макет стека шириной 10% и начните с 90% относительного макета с высотой в качестве родителя. Сделайте его ориентацию вертикальной. Добавьте все алфавиты в макет стека как метки и реализуйте егоTapGesture вScrollTo конкретная позиция.

Сделайте ширину 90% для Android только для iOS, и окна сохранят ее равной 100%, ширину макета стека равной 0% иIsVisible=false.

ViewModel:

public class JumpListViewModel : INotifyPropertyChanged
{
    private ObservableCollection<Item> _allItems;
    private List<string> _alphabetList;

    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

    public JumpListViewModel()
    {
        AllItems = new ObservableCollection<Item>(new List<Item> { new Item { MyText = "1" }, new Item { MyText = "2" }, new Item { MyText = "3" } });

        AlphabetList = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray().Select(x => x.ToString()).ToList();
    }

    public ObservableCollection<Item> AllItems
    {
        get { return _allItems; }
        set
        {
            _allItems = value;
            OnPropertyChanged();
        }
    }

    public List<string> AlphabetList
    {
        get { return _alphabetList; }
        set
        {
            _alphabetList = value;
            OnPropertyChanged();
        }
    }
}

Посмотреть :

<RelativeLayout VerticalOptions="FillAndExpand">

    <ListView VerticalOptions="FillAndExpand" HasUnevenRows="True" ItemsSource="{Binding AllItems}"
              SeparatorColor="Transparent" SeparatorVisibility="None" BackgroundColor="Transparent"
              RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Factor=1}">
      <RelativeLayout.WidthConstraint>
        <OnPlatform x:TypeArguments="Constraint" Android="{ConstraintExpression Type=RelativeToParent, Property=Width,Factor=0.9}"
                    iOS="{ConstraintExpression Type=RelativeToParent, Property=Width,Factor=1}"
          WinPhone="{ConstraintExpression Type=RelativeToParent, Property=Width,Factor=1}" />
      </RelativeLayout.WidthConstraint>

      <ListView.ItemTemplate>
        <DataTemplate>
          <ViewCell>

            <StackLayout HorizontalOptions="FillAndExpand" BackgroundColor="Silver">

              <Label Text="{Binding MyText}" />
              <Button Text="button" />
              <BoxView HeightRequest="1" Color="Gray" BackgroundColor="Gray" HorizontalOptions="FillAndExpand" />

            </StackLayout>

          </ViewCell>
        </DataTemplate>
      </ListView.ItemTemplate>
    </ListView>

    <ListView VerticalOptions="FillAndExpand" HasUnevenRows="True" ItemsSource="{Binding AlphabetList}"
              SeparatorColor="Transparent" SeparatorVisibility="None" BackgroundColor="Transparent"
              RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Factor=0.9}"
      RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent, Property=Height, Factor=0.05}"
      RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToParent, Property=Width, Factor=0.9}">
      <RelativeLayout.WidthConstraint>
        <OnPlatform x:TypeArguments="Constraint" Android="{ConstraintExpression Type=RelativeToParent, Property=Width,Factor=0.1}"
                    iOS="{ConstraintExpression Type=RelativeToParent, Property=Width,Factor=0, Constant=0}"
          WinPhone="{ConstraintExpression Type=RelativeToParent, Property=Width,Factor=0, Constant=0}" />
      </RelativeLayout.WidthConstraint>
      <ListView.IsVisible>
        <OnPlatform x:TypeArguments="x:Boolean" WinPhone="False" iOS="False" Android="True" />
      </ListView.IsVisible>
      <ListView.ItemTemplate>
        <DataTemplate>
          <ViewCell>
            <Label Text="{Binding .}" TextColor="Red" FontSize="Micro" />
          </ViewCell>
        </DataTemplate>
      </ListView.ItemTemplate>
    </ListView>

  </RelativeLayout>

Снимок экрана с Android:

 Prageeth godage22 авг. 2017 г., 09:12
у вас есть образец сейчас?
 Bhuvaneshwaran Vellingiri19 апр. 2018 г., 15:40
@RohitVipinMathews вы можете поделиться образцом сейчас?
 Himanshu Dwivedi09 авг. 2016 г., 08:14
Большое спасибо, я постараюсь реализовать это.
 Rohit Vipin Mathews08 авг. 2016 г., 17:08
Я постараюсь добавить пример кода в ближайшее время.
 Rohit Vipin Mathews19 апр. 2018 г., 16:16
Это уже в ответе.

Ваш ответ на вопрос