Android Mvvmcross绑定代码片段的子级

Android Mvvmcross绑定代码片段的子级,android,xamarin,mvvmcross,model-binding,Android,Xamarin,Mvvmcross,Model Binding,我在Xamarin中使用MvvMCross绑定片段的代码时遇到了一个小问题。 首先,我想做什么或我做什么: 我希望我的解释可以。我从最低的元素开始。 首先,我构建我的UI动态。 我有很多“模板”。它们定义了我的片段剪接,例如一个标签和一个ACTextEdit字段 然后我有很多片段(我的观点)。它们包含这个代码窃贼 在一个单独的类中,我将剪子添加到片段中,并给它们唯一的id 我的背景是在Mvx中使用片段和ViewPager的教程。奥斯特巴隆的: 现在我必须用我的Fragement和Vie模型创建

我在Xamarin中使用MvvMCross绑定片段的代码时遇到了一个小问题。 首先,我想做什么或我做什么: 我希望我的解释可以。我从最低的元素开始。 首先,我构建我的UI动态。 我有很多“模板”。它们定义了我的片段剪接,例如一个标签和一个ACTextEdit字段

然后我有很多片段(我的观点)。它们包含这个代码窃贼 在一个单独的类中,我将剪子添加到片段中,并给它们唯一的id 我的背景是在Mvx中使用片段和ViewPager的教程。奥斯特巴隆的:

现在我必须用我的Fragement和Vie模型创建一个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);
        }
    }
}
使用Android.OS;
使用Android.Views;
使用Android.Widget;
使用cirries.MvvmCross.Binding.BindingContext;
使用cirries.MvvmCross.Binding.Droid.BindingContext;
使用cirrius.MvvmCross.Droid.Fragging.Fragments;
使用TipCalc.Core.ViewModels;
命名空间TipCalc.UI.Droid.Views.Fragments
{
公共类TipCalcFragment:MvxFragment
{
创建视图上的公共覆盖视图(布局、充气机、视图组容器、捆绑包保存状态)
{
视图v=充气机。充气(Resource.Layout.View\u tip,container,false);
var edit=v.findviewbyd(Resource.Id.editTest43);
var ignore=base.OnCreateView(充气机、容器、savedInstanceState);
var set=this.CreateBindingSet();
set.Bind(edit).To(vm=>vm.Tip);
set.Apply();
返回this.BindingInflate(Resource.Layout.view\u tip,null);
}
}
}

它可能在错误的位置不起作用?

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

public override View OnCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    this.EnsureBindingContextIsSet (savedInstanceState);
    return this.BindingInflate(Resource.Layout.UserHeaderView, null);
}
即使没有在布局文件中声明,也应该始终调用EnsureBindingContextIsSet。它是一个扩展方法,因此您可能必须声明

  • Cirries.MvvmCross.Binding.BindingContext
  • Cirries.MvvmCross.Binding.Droid.BindingContext

在您的使用中。

您能否编辑您的问题,向我们展示一个不起作用的代码示例?或者告诉我们错误/问题是什么?还有一些很好的教程-例如,我遇到了相同的问题,
this.CreateBindingSet
MvxFragment
中不可用。非常感谢您的帮助。@Telemat CreateBindingSet在您手动插入正确的导入后可用:
使用cirrian.MvvmCross.Binding.BindingContext