我在Xamarin中使用MvvMCross绑定片段代码有一点问题.
首先,我想做什么或我要做什么:
我希望我的解释还可以.我从最低的元素开始.
首先,我建立动态的UI.
我有很多“模板”.它们定义了我的片段片段,例如Lable和ACTextEdit-Field.
然后,我有很多片段(我的视图).它们包含此代码片段
在单独的课程中,我将片段添加到“片段”中,并为其赋予唯一的ID
我的基础是将片段和ViewPager与Mvx结合使用的教程. 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);
}
}
}
并且它可能无法在错误的地方工作?
解决方法:
我强烈建议您在布局文件中声明绑定.
然后,您的OnCreateView可以简化为:
public override View OnCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
this.EnsureBindingContextIsSet (savedInstanceState);
return this.BindingInflate(Resource.Layout.UserHeaderView, null);
}
即使未在布局文件中声明它,也应始终调用SecureBindingContextIsSet.这是一个扩展方法,因此您可能必须声明
> Cirrious.MvvmCross.Binding.BindingContext
> Cirrious.MvvmCross.Binding.Droid.BindingContext
在您的使用中.