2015-09-06 2 views
1

Существует много примеров этого в axml, но я хотел бы иметь полное связывание с использованием кода. Честно говоря, я хотел бы иметь NO axml, но похоже, что создание всех элементов управления программно является кошмаром.Android ListView привязка программно

я впервые попробовал предложения по адресу: MvxListView create binding for template layout from code

У меня есть список связывания с фоновым кодом, и я получаю шесть строк (так источник связывания работает); но сами клетки не связывают.

Тогда по следующему адресу: Odd issue with MvvmCross, MvxListViewItem on Android

Стюарт имеет следующий комментарий: просмотрел. В этом случае я не думаю, что вы хотите использовать DelayBind. DelayBind используется для задержки действия привязки до следующего момента установки DataContext. В случае MvxAdapter/MvxListItemView для Android в DataContext передается в ctor, поэтому DataContext не устанавливается повторно, пока ячейка не будет повторно использована. (Это отличается от iOS MvxTableDataSource).

Так что, по сути, единственный пример, который я вижу, показывает DelayBind, который не должен работать.

Может кто-нибудь, пожалуйста, покажите мне несколько примеров ... спасибо заранее.


Добавлен ответ Комментарии:

Cheesebaron, прежде всего, огромное спасибо и уважение всех ваших вкладов;

Теперь, почему бы не использовать axml? Ну, как программисты, у всех нас есть свои предпочтения и способы делать вещи - я думаю, что я старая школа, где у нас не было дизайнера gui (не совсем так).

Реальные причины:

  1. Общие Стиль: У меня есть установки, где ядро ​​имеет все детали стиля, в том числе то, что бы все цвета. Моя идея в том, что каждая платформа получит детали стиля из ядра и обновит соответственно. Для меня легко создать элементы управления с правильным стилем.

  2. Скопировать-Вставить через платформу (что тогда я могу даже иметь связанные файлы, если захочу). Например, у меня есть экран входа в систему с проверкой в ​​Интернете, где под элементом управления появляется красный текст ошибки; В целом на этом экране у меня около 10 предметов, которые нуждаются в привязке. У меня уже есть версия iOS - поэтому, начиная с Droid, я скопировал весь раздел привязки с ios, и он отлично работал. Итак, вся привязка, я могу сделать ее такой же на всей платформе ... Любая возможная ошибка на моем пути остановится при построении, что, по моему мнению, является основным преимуществом по сравнению с привязкой axml. Даже создание элемента управления очень похоже, где у меня есть помощники с тем же именем метода.

Конечно я понимаю всю дополнительную компоновку, которая должна быть обработана; если честно, это не так уж плохо, если вы действительно это переживаете; Я создал StackPanel для Droid, который основан на WP, который внутренне обрабатывает все макеты для дочерних просмотров; поэтому для LinearLayout все, что я делаю, это настройка некоторых пользовательских параметров, и пусть моя панель справится с этим. Относительная - другая история; до сих пор у меня есть только один экран, который относительный, и я могу даже сделать его Linear, чтобы уменьшить мой дополнительный код макета.

Итак, с моей скромной точки зрения, для моего стиля создание кода позволяет мне полностью копировать все мои привязки (у меня есть некоторые настраиваемые фабрики привязки, чтобы это допускать), скопируйте все мои элементы управления, создайте строки; то только добавление этих элементов управления в представление является единственной частью, которая отличается (тогда опять же дроид и WP почти идентичны). Таким образом, я не могу пропустить что-то на одной платформе, и все вынуждены быть одинаковыми. Это также позволяет мне изменять все стили для каждой платформы, просто меняя ядро. Наконец, во время компиляции обнаруживается любая ошибка привязки - и мне это нравится.

Мой первоначальный вопрос был не в том, чтобы НЕ использовать axml ... это было о том, как использовать MvxListView, где все привязки выполняются в коде; как я объяснил, я получил привязку к списку, но не привязку к элементу/ячейке.

Еще раз спасибо.

Вот часть моего LoginScreen от дроида; Я думаю, что это приемлемое количество кода для отсутствия файла axml.

  //====================================================================================================== 
     // create and add all controls 
     //====================================================================================================== 
     var usernameEntry = ControlHelper.GetUITextFieldCustom(this, "Username.", maxLength: 20); 
     var usernameError = AddErrorLabel<UserAuthorization, string>(vm => ViewModel.Authorization.Username); 
     var passwordEntry = ControlHelper.GetUITextFieldCustom(this, "Password.", maxLength: 40, secureTextEntry: true); 
     var passwordError = AddErrorLabel<UserAuthorization, string>(vm => ViewModel.Authorization.Password); 
     var loginButton = ControlHelper.GetUIButtonMain(this); 
     var rememberMe = new UISwitch(this); 
     var joinLink = ControlHelper.GetUIButtonHyperLink(this, textAlignment: UITextAlignment.Center); 
     var copyRightText = ControlHelper.GetUILabel(this, textAlignment: UITextAlignment.Center); 
     var copyRightSite = ControlHelper.GetUIButtonHyperLink(this, textAlignment: UITextAlignment.Center); 

     var layout = new StackPanel(this, Orientation.Vertical) 
     { 
      Spacing = 15, 
      SubViews = new View[] 
       { 
        ControlHelper.GetUIImageView(this, Resource.Drawable.logo), 
        usernameEntry, 
        usernameError, 
        passwordEntry, 
        passwordError, 
        loginButton, 
        rememberMe, 
        joinLink, 
        ControlHelper.GetSpacer(this, ViewGroup.LayoutParams.MatchParent, weight: 2), 
        copyRightText, 
        copyRightSite 
       } 
     }; 
+0

Зачем вам не использовать axml? Он отлично работает в наших приложениях. – Martijn00

+0

Я согласен с @ Martijn00. Нет смысла не использовать его. В противном случае вам придется писать много кода, обрабатывая все виды LayoutParameters и т. Д., Которые в конечном итоге станут большой головной болью. – Cheesebaron

+0

обновлен с помощью редактирования –

ответ

0

Я просто столкнулся с подобной ситуацией, используя Mvx4.

Первая ссылка, которую вы упомянули было это почти правильно и когда вы объединяете его от Staurts комментария во второй ссылке и просто удалить окружающий DelayBind вызов, все должно работать нормально -

public class CustomListItemView 
    : MvxListItemView 
{ 
    public MvxListItemView(Context context, 
          IMvxLayoutInflater layoutInflater, 
          object dataContext, 
          int templateId) 
     : base(context, layoutInflater, dataContext, templateId) 
    { 
     var control = this.FindViewById<TextView>(Resource.Id.list_complex_title); 
     var set = this.CreateBindingSet<CustomListViewItem, YourThing>(); 
     set.Bind(control).To(vm => vm.Title); 
     set.Apply(); 
    } 
} 

P.S. Я попросил ссылку Edit на исходную ссылку, чтобы помочь другим.

Смежные вопросы