[英]MVVMCross Bindings in Android
我正在开发一个跨平台的应用程序,从android启动它。 我已经找到了您的MVVMCross项目,并且正在尝试进入该项目。 现在我是一个新手,不知道如何将WebService-Results绑定到ListView。 这里以XAML为例,说明我如何尝试它:
xmlns:mobsales="http://schemas.android.com/apk/res/MobSales.DroidUI"
...
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
mobsales:MvxItemTemplate="@layout/listitem_customer"
mobsales:MvxBind="{'ItemSource':{'Path':'Customer'}}" />
...
看起来像这样
<cirrious.mvvmcross.binding.android.views.MvxBindableListView
android:id="@+id/autocomplete"
android:layout_below="@id/txtfield"
android:layout_centerHorizontal="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
mobsales:MvxItemTemplate="@layout/listitem_customer"
mobsales:MvxBind="{'ItemSource':{'Path':'Customers'}}" />
当我将鼠标悬停在最后两行时,工具提示说未声明属性。 我真的不知道你是怎么做到的。 你能给我一些建议吗? 我想我必须在UI项目的Values中编写一些xml,对吗?
另一个问题:如何使用AutoCompleteTextViews? 我是否必须为此先编写自己的MvXBindables? 有什么建议吗? :-)
要绑定这些属性,您需要包括名称空间-看起来已经完成了。
您还需要将MvxBindingAttributes.xml文件包含到您的UI项目中-https: //github.com/slodge/MvvmCross/blob/master/Cirrious/Cirrious.MvvmCross.Binding/ResourcesToCopy/MvxBindingAttributes.xml-并且必须设置将此文件构建为“ AndroidResource”的操作
有关示例,请参阅任何Android示例项目-https://github.com/slodge/MvvmCross
对于有关添加绑定的问题的第二部分,绑定框架应自动单向绑定(从ViewModel到View)到任何Monodroid View / widget上的现有公共属性。
如果public属性的类型不正确(例如,它是某个Android枚举而不是View),则可以使用IMvxValueConverter进行转换。
如果要进行双向绑定,或者没有要绑定的公共属性,则可以轻松地进行自定义绑定。 有关此示例,请参阅会议示例中的自定义IsFavorite 2方式绑定。
这段代码向每个Android Button添加了一个新的可绑定伪属性“ IsFavorite”。
...这是使用以下代码在Setup.cs中初始化的:
protected override void FillTargetFactories(MvvmCross.Binding.Interfaces.Bindings.Target.Construction.IMvxTargetBindingFactoryRegistry registry)
{
base.FillTargetFactories(registry);
registry.RegisterFactory(
new MvxCustomBindingFactory<Button>(
"IsFavorite",
(button) => new FavoritesButtonBinding(button)));
}
...,绑定代码为:
public class FavoritesButtonBinding
: MvxBaseAndroidTargetBinding
{
private readonly Button _button;
private bool _currentValue;
public FavoritesButtonBinding(Button button)
{
_button = button;
_button.Click += ButtonOnClick;
}
private void ButtonOnClick(object sender, EventArgs eventArgs)
{
_currentValue = !_currentValue;
SetButtonBackground();
FireValueChanged(_currentValue);
}
public override void SetValue(object value)
{
var boolValue = (bool)value;
_currentValue = boolValue;
SetButtonBackground();
}
private void SetButtonBackground()
{
if (_currentValue)
{
_button.SetBackgroundResource(Resource.Drawable.star_gold_selector);
}
else
{
_button.SetBackgroundResource(Resource.Drawable.star_grey_selector);
}
}
protected override void Dispose(bool isDisposing)
{
if (isDisposing)
{
_button.Click -= ButtonOnClick;
}
base.Dispose(isDisposing);
}
public override Type TargetType
{
get { return typeof(bool); }
}
public override MvxBindingMode DefaultMode
{
get { return MvxBindingMode.TwoWay; }
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.