Mvvmcross绑定代码片段的子代

时间:2014-03-27 15:52:43

标签: android xamarin mvvmcross model-binding

我在Xamarin中使用MvvMCross对片段代码进行绑定时遇到了一些问题。 首先,我想做什么或做什么: 我希望我的解释没问题。我从最低元素开始。 首先,我构建我的UI动态。 我有很多“模板”。他们定义了我的片段剪辑,例如Lable和ACTextEdit-Field。

然后我有很多碎片(我的观点)。它们包含此代码表 在一个单独的类中,我将剪辑添加到Fragment并为它们提供唯一的ID 我的基础是使用Fragments和ViewPager与Mvx的教程。奥斯特巴隆:

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

现在我必须用我的Fragement和我的VieModel创建一个Bindingset。然后我必须使用View模型中的属性绑定Elements。 但我不知道在代码中的哪个地方。我尝试在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);
        }
    }
}

它不起作用可能是错误的地方?

1 个答案:

答案 0 :(得分:4)

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

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

即使没有在布局文件中声明它,也应该始终调用EnsureBindingContextIsSet。这是一种扩展方法,因此您可能需要声明

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

在你的使用中。