Mvvmcross在代码上绑定片段的子代

use*_*473 4 android model-binding mvvmcross xamarin

我在Xamarin中使用MvvMCross绑定片段代码有一点问题。首先,我想做什么或要做什么:我希望我的解释还可以。我从最低的元素开始。首先,我建立动态的UI。我有很多“模板”。它们定义了我的片段片段,例如Lable和ACTextEdit-Field。

然后,我有很多片段(我的视图)。它们包含此代码片段。在一个单独的类中,我将片段添加到Fragment中,并为其赋予唯一的ID。Ostebaron:

http://blog.ostebaronen.dk/2013/07/fragments-and-viewpager-with-mvx.html

现在,我必须使用Fragement和VieModel创建一个Bindingset。然后,我必须将元素与视图模型中的属性绑定。但我不知道代码中的哪个位置。我试图在HomeView的OncreateView函数中执行此操作,但是它没有用。

有人知道如何解决这个问题或给我一些建议吗?

我选择绑定此:

using Android.OS;
using Android.Views;
using Android.Widget;
using Cirrious.MvvmCross.Binding.BindingContext;
using Cirrious.MvvmCross.Binding.Droid.BindingContext;
using Cirrious.MvvmCross.Droid.Fragging.Fragments;
using TipCalc.Core.ViewModels;

namespace TipCalc.UI.Droid.Views.Fragments
{

    public class TipCalcFragment : MvxFragment
    {
        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
           View v = inflater.Inflate(Resource.Layout.view_tip, container, false);
            var edit = v.FindViewById<TextView>(Resource.Id.editTest43);
            var ignore = base.OnCreateView(inflater, container, savedInstanceState);
            var set = this.CreateBindingSet<TipCalcFragment, TipViewModel>();
            set.Bind(edit).To(vm => vm.Tip);
            set.Apply();
            return this.BindingInflate(Resource.Layout.view_tip, null);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并且它可能无法在错误的地方工作?

Eug*_*imm 5

我强烈建议您在布局文件中声明绑定。然后,您的OnCreateView可以简化为:

public override View OnCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    this.EnsureBindingContextIsSet (savedInstanceState);
    return this.BindingInflate(Resource.Layout.UserHeaderView, null);
}
Run Code Online (Sandbox Code Playgroud)

即使未在布局文件中声明它,也应始终调用SecureBindingContextIsSet。这是一个扩展方法,因此您可能必须声明

  • Cirrious.MvvmCross.Binding.BindingContext
  • Cirrious.MvvmCross.Binding.Droid.BindingContext

在您的使用中。