2014-03-27 39 views
3

我在Xamarin中使用MvvMCross綁定代碼片段時遇到了一些問題。 首先我想做什麼或我做什麼: 我希望我的解釋沒問題。我從最低的元素開始。 首先,我構建了我的UI動態。 我有很多「模板」。他們定義了我的片段剪輯,例如一個Lable和一個ACTextEdit字段。Mvvmcross綁定代碼上的一個片段的孩子

然後我有很多片段(我的觀點)。它們包含這些代碼片段 在一個單獨的類中,我將片段添加到片段併爲它們提供了唯一的ID 我的理由是使用片段和ViewPager與Mvx的教程。的Ostebaron:

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

,現在我要創建一個Bindingset我Fragement和我VieModel。然後我必須將元素與視圖模型中的屬性綁定。 但我不知道在代碼中的哪個地方。我試圖在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); 
     } 
    } 
} 

,它也許不到風度的工作錯了地方?

+0

你可以編輯你的問題向我們展示一個沒有工作的代碼的例子嗎?或者告訴我們錯誤/問題是什麼?還有一些很好的教程 - 例如http://enginecore.blogspot.co.uk/2013/06/mvvmcross-android-app-with-dynamic.html – Stuart

+1

我遇到了同樣的問題,'this.CreateBindingSet'在'MvxFragment'中不可用。任何幫助將非常感激。 – Telemat

+0

@Telemat CreateBindingSet可用,一旦你手動插入正確的導入:'使用Cirrious.MvvmCross.Binding.BindingContext;' – Thomas

回答

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

在usings。