От какого класса наследовать источник связанной таблицы

Я использую Xamarin и mvvmcross и что иметь представление с таблицей, в конечном итоге привязанной к наблюдаемой коллекции.

Это видео очень информативно о том, как создавать пользовательские ячейки, но кажется, актуальный. Примерно через 42 минуты Стюарт создает источник данных для своей таблицы, производный от MvxSimpleBindableTableSource, но этого класса, похоже, не существует, или, по крайней мере, я не могу его найти. Итак, каков «лучший» способ привязки к UITableView с помощью mvvmcross?

Кроме того, я использую UITableView в обычном MvxViewController, потому что я не могу заставить MvxTableViewController работать с xib, который похоже, что этот вопрос в настоящее время невозможен.


person Matt Burland    schedule 07.06.2013    source источник


Ответы (1)


Доступные источники таблиц v3:

Абстрактные классы

  • MvxBaseTableViewSource
    • base functionality only
    • нет ItemsSource - обычно не используется напрямую
  • MvxTableViewSource.cs
    • inherits from the basetable and addes ItemsSource for data-binding
    • наследующие классы нужно только реализовать protected abstract UITableViewCell GetOrCreateCellFor(UITableView tableView, NSIndexPath indexPath, object item);

Бетонные классы

  • MvxStandardTableViewSource.cs
    • inherits from MvxTableViewSource
    • предоставляет «стандартные типы ячеек iPhone» через UITableViewCellStyle
    • внутри них вы можете связать TitleText, DetailText, ImageUrl и (с небольшим поддразниванием) аксессуар
  • MvxSimpleTableViewSource.cs
    • inherits from MvxTableViewSource
    • обеспечивает единый тип ячейки для всех элементов в коллекции — через string nibName в ctor
    • внутри этих ячеек можно привязать что угодно - смотрите видео (позже)
  • MvxActionBasedTableViewSource.cs — предоставляет некоторые хуки Func<>style чтобы позволить вам реализовать GetOrCreateCellFor без наследования нового класса от MvxTableViewSource

Обычно я использую:

  • in demos:
    • a MvxStandardTableViewSource - because I get a list without having to create a custom cell
  • in real code:
    • a MvxSimpleTableViewSource when I only need one cell type
    • пользовательский класс, наследуемый от MvxTableViewSource, когда мне нужно несколько типов ячеек - например. Смотри ниже

Общий TableSource с несколькими типами ячеек обычно выглядит так: ">PolymorphicListItemTypesView.cs:

public class PolymorphicListItemTypesView
    : MvxTableViewController
{
    public PolymorphicListItemTypesView()
    {
        Title = "Poly List";
    }

    public override void ViewDidLoad()
    {
        base.ViewDidLoad();

        var source = new TableSource(TableView);
        this.AddBindings(new Dictionary<object, string>
            {
                {source, "ItemsSource Animals"}
            });

        TableView.Source = source;
        TableView.ReloadData();
    }

    public class TableSource : MvxTableViewSource
    {
        private static readonly NSString KittenCellIdentifier = new NSString("KittenCell");
        private static readonly NSString DogCellIdentifier = new NSString("DogCell");

        public TableSource(UITableView tableView)
            : base(tableView)
        {
            tableView.RegisterNibForCellReuse(UINib.FromName("KittenCell", NSBundle.MainBundle),
                                              KittenCellIdentifier);
            tableView.RegisterNibForCellReuse(UINib.FromName("DogCell", NSBundle.MainBundle), DogCellIdentifier);
        }

        public override float GetHeightForRow(UITableView tableView, NSIndexPath indexPath)
        {
            return KittenCell.GetCellHeight();
        }

        protected override UITableViewCell GetOrCreateCellFor(UITableView tableView, NSIndexPath indexPath,
                                                              object item)
        {
            NSString cellIdentifier;
            if (item is Kitten)
            {
                cellIdentifier = KittenCellIdentifier;
            }
            else if (item is Dog)
            {
                cellIdentifier = DogCellIdentifier;
            }
            else
            {
                throw new ArgumentException("Unknown animal of type " + item.GetType().Name);
            }

            return (UITableViewCell) TableView.DequeueReusableCell(cellIdentifier, indexPath);
        }
    }
}

Это видео очень информативно о том, как создавать пользовательские ячейки, но кажется устаревшим.

Он был создан только до Xamarin 2.0 и до V3, но принципы очень похожи.

Код этой статьи был обновлен — см. https://github.com/slodge/MvvmCross-Tutorials/tree/master/MonoTouchCellTutorial

Сверх того:

  • в серии N+1 есть много демонстраций использования таблиц, проиндексированных по адресу http://mvvmcross.wordpress.com.

    • N=2 and N=3 are very basic
    • N=6 и N=6,5 охватывают список книг (хорошее место для начала).
    • N=11 охватывает просмотры коллекций
    • От N=12 до N=17 создать большое приложение со списком/таблицей из базы данных
  • в примере «Работа с коллекциями» довольно много кода таблиц и списков — https://github.com/slodge/MvvmCross-Tutorials/tree/master/Working%20With%20Collections

  • таблицы используются во время презентации Evolve — http://xamarin.com/evolve/2013#session-dnoeeoarfj

  • доступны и другие примеры — см. https://github.com/slodge/MvvmCross-Tutorials/ (или выполните поиск по GitHub для mvvmcross — другие тоже выкладывают образцы)

Кроме того, я использую UITableView в обычном MvxViewController, потому что я не могу заставить MvxTableViewController работать с xib, что, как предполагает этот вопрос, в настоящее время невозможно.

Я думаю, что с тех пор это было исправлено - см. MvxTableViewController.cs #L33

person Stuart    schedule 07.06.2013