【问题标题】:List of local:MvxBind binders本地列表:MvxBind 绑定器
【发布时间】:2013-11-22 19:19:42
【问题描述】:

我找不到所有可用的活页夹类型的列表,最近一位同事发现了关于 local:MvxBind="Visibility Property" 的信息,这对我们的代码有很大帮助。我相信 MvvMCross 有很多我们还不知道的隐藏宝石。信息在某处可用吗?

我们知道的粘合剂:

  • local:MvxBind="文本属性"
  • local:MvxBind="ItemsSource 属性;SelectedItem 属性"
  • local:MvxBind="单击 ICommandProperty"
  • local:MvxBind="ItemsSource 属性;ItemClick ICommandProperty"
  • local:MvxBind="可见性属性"

谢谢!

【问题讨论】:

    标签: android mvvmcross


    【解决方案1】:

    自动属性绑定

    MvvmCross 绑定到本机视图上的 C# 属性 - 因此 Xamarin.Android 公开的任何公共 C# get/set 属性都可以单向绑定。

    此外,如果属性Foo伴随着签名事件public event EventHandler FooChanged,那么MvvmCross可以双向绑定到它。


    自动事件绑定

    MvvmCross 还绑定到任何由本机视图公开的 public C# events - 只要它们具有 EventHandler 签名并且没有 EventHandler<SomeSpecialArgs>

    这些可以自动绑定到 ICommand 调用者(操作会自动绑定到 Execute 处理程序,但 nothing 会自动绑定到 CanExecute)。


    自定义绑定

    除了这些简单的属性之外,MvvmCross 还具有“自定义绑定”功能。

    MvvmCross 默认提供的“自定义绑定”列表位于 AndroidBindingBuilder 中的FillTargetBindings - 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

    关于 MvvmCross 自定义控件、动画和地图的 N+1 个主题也值得关注 - 它们提供了自定义绑定的替代机制。

    有关 MvvmCross 绑定的更多信息,请参阅https://github.com/MvvmCross/MvvmCross/wiki/Databinding

    【讨论】:

    • 谢谢斯图尔特,这正是我想要的!
    • 我不确定这个列表是如何表示“默认”绑定的,因为我看不到“Click”、“TextChanged”等基本绑定。我今天有同样的问题并且是想知道是否有一种系统的方法来发现现有的绑定。我编码时的主要目标之一是将大部分视图控制器代码迁移到视图模型中,因此了解指尖上的绑定非常重要。
    • 它们与any public C# get/set property exposed by Xamarin.Android can be one-way bound to. 属于同一类型的包罗万象 - 我将更改问题中的文本以提供帮助。
    猜你喜欢
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    相关资源
    最近更新 更多