Data binding MvvmCross:更改MonoDroid上绑定的更新源触发器属性
我想在Droid EditText视图中将默认绑定触发器从PropertyChanged更改为LostFocus:Data binding MvvmCross:更改MonoDroid上绑定的更新源触发器属性,data-binding,xamarin.android,mvvmcross,Data Binding,Xamarin.android,Mvvmcross,我想在Droid EditText视图中将默认绑定触发器从PropertyChanged更改为LostFocus: <EditText android:layout_width="fill_parent" android:layout_gravity="center" android:textSize="16dp" android:minWidth="168dp
<EditText
android:layout_width="fill_parent"
android:layout_gravity="center"
android:textSize="16dp"
android:minWidth="168dp"
local:MvxBind="Text SelectedCode, UpdateSourceTrigger=LostFocus" />
但是我无法从中找到正确的语法
我知道这在框架内是可能的,但找不到参考
想法
TIA.绑定语法不提供
UpdateSourceTrigger
改变触发机制的唯一方法是:
- 提供自定义绑定
- 或提供自定义控件
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);
}
}
注册使用:
registry.RegisterCustomBindingFactory<EditText>("FocusText",
textView => new MvxEditTextFocusChangeTextSpecialTargetBinding(textView));
有关自定义绑定的详细信息,请参阅N=28教程-我认为UpdateSourceTrigger是XAML绑定的一部分。这里有一句话需要注意-我刚刚意识到我从MvvmCross的BindingChanges 3.0.13-beta4分支中选取了这个示例-这个分支引入了
SetValueImpl
和SubscribeToEvents
-之前您使用了SetValues
,并将将代码订阅到构造函数中。我希望能很快把3.0.13推到稳定状态(只剩下一个安卓。对话问题有待解决)。谢谢斯图尔特。我只是想补充一点,我需要做一个升级,因为我缺少前面提到的一些API。我仍然在3.0.11版本中。类似于(未进行测试-但看起来似乎有点正确)在构造函数中添加订阅代码并重写SetValue对于3.0.11版本很有效。再次感谢。当用户更改文本,然后点击actionbar中的后退按钮时,绑定不会更新。
local:MvxBind="FocusText VMProperty"