Список локальных: MvxBind binders

Я не мог найти список всех типов связующих, доступных для использования, недавно коллега, найденная о локальном: MvxBind = "Свойство видимости", и это очень помогло нашему кодексу. Я верю, что у MvvMCross много скрытых драгоценных камней, которые мы еще не знаем. Доступна ли информация где-нибудь?

Связи, которые мы знаем:

  • local: MvxBind = "Текстовое свойство"
  • local: MvxBind = "Свойство ItemsSource; Свойство SelectedItem"
  • local: MvxBind = "Нажмите ICommandProperty"
  • local: MvxBind = "Свойство ItemsSource; ItemClick ICommandProperty"
  • local: MvxBind = "Свойство видимости"

Спасибо!

Ответ 1

Автоматическое связывание свойств

MvvmCross связывается с свойствами С# в собственных представлениях - поэтому любое общедоступное свойство С# get/set, открытое Xamarin.Android, может быть привязано к одностороннему.

Кроме того, если свойство Foo сопровождается событием подписи public event EventHandler FooChanged, то MvvmCross может привязываться к нему в двух направлениях.


Автоматическая привязка событий

MvvmCross также связывается с любым public С# event, который отображается с помощью собственных представлений - если у них есть подписи EventHandler и не EventHandler<SomeSpecialArgs>

Они могут автоматически привязываться к ICommand вызывающим (действие автоматически привязывается к обработчику Execute, но ничего не привязано к CanExecute).


Пользовательская привязка

Помимо этих прямолинейных свойств, MvvmCross также имеет возможности для "пользовательских привязок".

Список "настраиваемых привязок", поставляемый по умолчанию в MvvmCross, находится в FillTargetBindings в AndroidBindingBuilder - https://github.com/MvvmCross/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Binding.Droid/MvxAndroidBindingBuilder.cs#L79

        registry.RegisterCustomBindingFactory<TextView>("Text",
                                                        textView => new MvxTextViewTextTargetBinding(textView));
        registry.RegisterPropertyInfoBindingFactory((typeof(MvxAutoCompleteTextViewPartialTextTargetBinding)),
                                                typeof(AutoCompleteTextView), "PartialText");
        registry.RegisterPropertyInfoBindingFactory(
                                                typeof(MvxAutoCompleteTextViewSelectedObjectTargetBinding),
                                                typeof(AutoCompleteTextView),
                                                "SelectedObject");
        registry.RegisterPropertyInfoBindingFactory(typeof(MvxCompoundButtonCheckedTargetBinding),
                                                typeof(CompoundButton), "Checked");
        registry.RegisterPropertyInfoBindingFactory(typeof(MvxSeekBarProgressTargetBinging), typeof(SeekBar),
                                                "Progress");
        registry.RegisterCustomBindingFactory<View>("Visible",
                                                        view => new MvxViewVisibleBinding(view));
        registry.RegisterCustomBindingFactory<View>("Hidden",
                                                        view => new MvxViewHiddenBinding(view));
        registry.RegisterCustomBindingFactory<ImageView>("Bitmap",
                                                        imageView => new MvxImageViewBitmapTargetBinding(imageView));
        registry.RegisterCustomBindingFactory<ImageView>("DrawableId",
                                                        imageView => new MvxImageViewDrawableTargetBinding(imageView));
        registry.RegisterCustomBindingFactory<ImageView>("DrawableName",
                                                        imageView => new MvxImageViewDrawableNameTargetBinding(imageView));
        registry.RegisterCustomBindingFactory<ImageView>("AssetImagePath",
                                                         imageView => new MvxImageViewImageTargetBinding(imageView));
        registry.RegisterCustomBindingFactory<MvxSpinner>("SelectedItem",
                                                                         spinner =>
                                                                         new MvxSpinnerSelectedItemBinding(
                                                                             spinner));
        registry.RegisterCustomBindingFactory<AdapterView>("SelectedItemPosition",
                                                                          adapterView =>
                                                                          new MvxAdapterViewSelectedItemPositionTargetBinding
                                                                              (adapterView));
        registry.RegisterCustomBindingFactory<MvxListView>("SelectedItem",
                                                                          adapterView =>
                                                                          new MvxListViewSelectedItemTargetBinding
                                                                              (adapterView));
        registry.RegisterCustomBindingFactory<RatingBar>("Rating",
                                                        ratingBar => new MvxRatingBarRatingTargetBinding(ratingBar));
        registry.RegisterCustomBindingFactory<View>("LongClick",
                                                        view =>
                                                        new MvxViewLongClickBinding(view));
        registry.RegisterCustomBindingFactory<MvxRadioGroup>("SelectedItem",
            radioGroup => new MvxRadioGroupSelectedItemBinding(radioGroup));

Несколько плагинов (особенно Color) также добавляют свои собственные привязки.

Информацию о добавлении собственных пользовательских привязок см. в http://slodge.blogspot.co.uk/2013/06/n28-custom-bindings-n1-days-of-mvvmcross.html

Темы N + 1 на пользовательских элементах MvvmCross, на анимации и на картах также заслуживают внимания - они предоставляют альтернативные механизмы для пользовательских привязок.

Подробнее о привязке MvvmCross см. https://github.com/MvvmCross/MvvmCross/wiki/Databinding