【问题标题】:Mvvmcross binding Child of a Fragment on CodeMvvmcross binding Child of a Fragment on Code
【发布时间】:2014-03-27 15:52:42
【问题描述】:

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

然后我有很多片段(我的观点)。它们包含此代码片段 在一个单独的类中,我将片段添加到 Fragment 并给它们唯一的 id 我的基础是使用 Fragments 和 ViewPager 与 Mvx 的教程。 Ostebaron:

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

现在我必须使用我的 Fragment 和我的 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);
        }
    }
}

它不起作用也许是错误的地方?

【问题讨论】:

  • 您能否编辑您的问题,向我们展示一个不起作用的代码示例?或者告诉我们错误/问题是什么?还有一些很好的教程 - 例如enginecore.blogspot.co.uk/2013/06/…
  • 我遇到了同样的问题,this.CreateBindingSetMvxFragment 中不可用。任何帮助将不胜感激。
  • @Telemat CreateBindingSet 在您手动插入正确的导入后可用:using Cirrious.MvvmCross.Binding.BindingContext;

标签: android xamarin mvvmcross model-binding


【解决方案1】:

我强烈建议您在布局文件中声明您的绑定。 然后您的 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

在你的使用中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-16
    • 2017-11-18
    • 2022-12-02
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多