【问题标题】:In MvvmCross how do I do custom bind properties在 MvvmCross 我如何做自定义绑定属性
【发布时间】:2012-05-22 10:43:37
【问题描述】:

我正在使用MvxBindableListViewList<> 的数据对象绑定到ListView。我用于行的布局有几个TextViews。我已成功将其中每个的 Text 属性绑定到我的数据对象中的一个属性,但我发现我无法绑定到 TextColor,因为该属性在 Mono For Android TextViews 中不存在;相反,您使用了 SetTextColor() 方法。那么如何将数据对象属性绑定到方法?!以下是我尝试使用的代码:

    <TextView
        android:id="@+id/MyValueTextView"
        android:layout_width="50dp"
        android:layout_height="20dp"
        android:layout_gravity="right"
        android:gravity="center_vertical|right"
        android:textSize="12sp"
        local:MvxBind="
        {
          'Text':{'Path':'MyValue','Converter':'MyValueConverter'},
          'TextColor':{'Path':'MyOtherValue','Converter':'MyOtherConverter'}
        }" />

【问题讨论】:

    标签: c# xamarin.android mvvmcross


    【解决方案1】:

    在会议示例中有一个为“IsFavorite”添加自定义 2 向绑定的示例 - 请参阅:

    这个例子在MVVMCross Bindings in Android中有更详细的解释

    对于单向“源到目标”自定义绑定,代码应该更简单一些 - 您只需要处理 SetValue - 并且不需要在任何事件处理中调用 FireValueChanged代码。


    对于 textColor,我想绑定看起来有点像:

    public class MyCustomBinding
        : MvxBaseAndroidTargetBinding
    {
        private readonly TextView _textView;
    
        public MyCustomBinding(TextView textView)
        {
            _textView = textView;
        }
    
        public override void SetValue(object value)
        {
            var colorValue = (Color)value;
            _textView.SetTextColor(colorValue);
        }
    
        public override Type TargetType
        {
            get { return typeof(Color); }
        }
    
        public override MvxBindingMode DefaultMode
        {
            get { return MvxBindingMode.OneWay; }
        }
    }
    

    并且将设置为:

        protected override void FillTargetFactories(MvvmCross.Binding.Interfaces.Bindings.Target.Construction.IMvxTargetBindingFactoryRegistry registry)
        {
            base.FillTargetFactories(registry);
    
            registry.RegisterFactory(new MvxCustomBindingFactory<TextView>("TextColor", (textView) => new MyCustomBinding(textView)));
        }
    

    注意:我没有编译这个示例代码 - 当你让它工作时,请回来更正这个伪代码:)

    【讨论】:

    • 老实说,我们只是按原样剪切和粘贴代码,它就可以工作了——对于伪代码来说还不错! ;)
    • 如果你在某种 SuperSimpleBinding 东西中构建这些样本,那么如果你可以将它放在 GitHub 上,那就太好了 :) - 假设 GitHub 现在是一个动词 :) 这对你的内部培训很有用以及公共 mvx 信息 :)
    • 你能给我一个线索吗,我应该如何处理 Touch 上的类似情况,如果我想处理这种绑定不是相对于某些属性而是 Action(例如,像“Button onclick “)?我找到了要继承的 MvxTargetBinding 类,但事件/动作处理/绑定的情况对我来说并不完全清楚。谢谢!
    • 我也有兴趣了解 iOS(触摸)中的相同内容。你能帮帮我吗?
    • 您的两个代码链接都指向 404,您是否有机会更新此答案?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    相关资源
    最近更新 更多