C# Android中的MVVMCross绑定
我正在开发一个跨平台的应用程序,在android上启动它。我已经找到了你的MVVMCross项目,我正在努力参与其中。现在我对它完全陌生,不知道如何将我的WebService结果绑定到我的ListView。 下面是一个XAML示例,我是如何尝试的:C# Android中的MVVMCross绑定,c#,xamarin.android,mvvmcross,C#,Xamarin.android,Mvvmcross,我正在开发一个跨平台的应用程序,在android上启动它。我已经找到了你的MVVMCross项目,我正在努力参与其中。现在我对它完全陌生,不知道如何将我的WebService结果绑定到我的ListView。 下面是一个XAML示例,我是如何尝试的: xmlns:mobsales="http://schemas.android.com/apk/res/MobSales.DroidUI" ... android:layout_width="fill_parent" android:layout_
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项目的值中编写一些xml,对吗
另一个问题:如何使用AutoCompleteTextView?我必须先为它编写自己的MvXBindables吗?有什么建议吗?:-) 要绑定这些属性,您需要包含名称空间——看起来您已经这样做了 您还需要将MvxBindingAttributes.xml文件包含到UI项目中,并且必须将此文件的构建操作设置为“AndroidResource” 例如,请参见任何Android示例项目-
关于添加绑定问题的第二部分,绑定框架应该自动单向绑定(从ViewModel到View)到任何Monodroid视图/小部件上的现有公共属性 如果公共属性的类型不正确(例如,它是某个Android枚举而不是视图),则可以使用IMvxValueConverter进行转换 如果您想要进行双向绑定,或者您想要绑定的对象没有公共属性,那么您可以相当轻松地进行自定义绑定。有关此示例,请参见中的自定义IsFavorite双向绑定 这段代码为每个Android按钮添加了一个新的可绑定伪属性“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; }
}
}