MvvmCross:在MonoDroid上更改绑定的更新源触发器属性 [英] MvvmCross: change update source trigger property of binding on MonoDroid

查看:135
本文介绍了MvvmCross:在MonoDroid上更改绑定的更新源触发器属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在Droid EditText视图中将PropertyChanged的默认绑定触发器更改为LostFocus:

 < EditText 
android:layout_width =fill_parent
android:layout_gravity =center
android:textSize =16dp
android:minWidth =168dp
local:MvxBind =Text SelectedCode,UpdateSourceTrigger = LostFocus/>

但是,我找不到正确的语法从维基



我知道这是可能在框架内,但找不到参考。 / p>

想法?



TIA。

解决方案

绑定语法不提供 UpdateSourceTrigger



触发机制是:




  • 提供自定义绑定

  • 或提供自定义控件li>


我会去自定义绑定,如:

  public class MvxEditTextFocusChangeTextSpecialTargetBinding 
:MvxAndroidTargetBinding
{
protected EditText EditText
{
get {return(EditText) }
}

private bool _subscribed;

public MvxEditTextFocusChangeTextSpecialTargetBinding(EditText view)
:base(view)
{
}

protected override void SetValueImpl(object target,object值)
{
var editText = EditText;
if(editText == null)
return;

value = value? string.Empty;
editText.Text = value.ToString();
}

public override MvxBindingMode DefaultMode
{
get {return MvxBindingMode.TwoWay; }
}

public override void SubscribeToEvents()
{
var editText = EditText;
if(editText == null)
return;

editText.FocusChange + = HandleFocusChange;
_subscribed = true;
}

private void HandleFocusChange(object sender,View.FocusChangeEventArgs e)
{
var editText = EditText;
if(editText == null)
return;

if(!e.HasFocus)
FireValueChanged(editText.Text);
}

public override类型TargetType
{
get {return typeof(string);


protected override void Dispose(bool isDisposing)
{
if(isDisposing)
{
var editText = EditText;
if(editText!= null&& _subscribed)
{
editText.FocusChange - = HandleFocusChange;
_subscribed = false;
}
}
base.Dispose(isDisposing);
}
}

注册使用:

  registry.RegisterCustomBindingFactory< EditText>(FocusText,
textView => new MvxEditTextFocusChangeTextSpecialTargetBinding(textView));

然后用作:

 本地:MvxBind =FocusText VMProperty

有关自定义绑定的更多信息,请参阅N = 28教程 - http://slodge.blogspot.co.uk/2013/06/n28-custom-bindings-n1-days-of-mvvmcross.html


I will like to change the default binding trigger from PropertyChanged to LostFocus on a Droid EditText view:

 <EditText
                android:layout_width="fill_parent"
                android:layout_gravity="center"
                android:textSize="16dp"
                android:minWidth="168dp"
                local:MvxBind="Text SelectedCode, UpdateSourceTrigger=LostFocus" />

But I cannot find the correct syntax from the Wiki

I know this is possible within the framework but cannot find the reference.

Ideas?

TIA.

解决方案

The binding syntax doesn't provide UpdateSourceTrigger

The only ways to change the triggering mechanism are:

  • to provide a custom binding
  • or to provide a custom control

I'd go for custom binding - something like:

public class MvxEditTextFocusChangeTextSpecialTargetBinding
    : MvxAndroidTargetBinding
{
    protected EditText EditText
    {
        get { return (EditText)Target; }
    }

    private bool _subscribed;

    public MvxEditTextFocusChangeTextSpecialTargetBinding(EditText view)
        : base(view)
    {
    }

    protected override void SetValueImpl(object target, object value)
    {
        var editText = EditText;
        if (editText == null)
            return;

        value = value ?? string.Empty;
        editText.Text = value.ToString();
    }

    public override MvxBindingMode DefaultMode
    {
        get { return MvxBindingMode.TwoWay; }
    }

    public override void SubscribeToEvents()
    {
        var editText = EditText;
        if (editText == null)
            return;

        editText.FocusChange += HandleFocusChange;
        _subscribed = true;
    }

    private void HandleFocusChange(object sender, View.FocusChangeEventArgs e)
    {
        var editText = EditText;
        if (editText == null)
            return;

        if (!e.HasFocus)
            FireValueChanged(editText.Text);
    }

    public override Type TargetType
    {
        get { return typeof(string); }
    }

    protected override void Dispose(bool isDisposing)
    {
        if (isDisposing)
        {
            var editText = EditText;
            if (editText != null && _subscribed)
            {
                editText.FocusChange -= HandleFocusChange;
                _subscribed = false;
            }
        }
        base.Dispose(isDisposing);
    }
}

registered using:

registry.RegisterCustomBindingFactory<EditText>("FocusText",
                                                        textView => new MvxEditTextFocusChangeTextSpecialTargetBinding(textView));

then used as:

 local:MvxBind="FocusText VMProperty"

For more on custom bindings, see the N=28 tutorial - http://slodge.blogspot.co.uk/2013/06/n28-custom-bindings-n1-days-of-mvvmcross.html

这篇关于MvvmCross:在MonoDroid上更改绑定的更新源触发器属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆