2013-10-30 54 views
0

在Android項目中,我試圖使用MvvmCross的CrossLight部分添加數據綁定。 標準TextView/Buttons的綁定效果很好。但隨着Mvx.Control簡單的標記:MvxSpinner/MvxListView不能用於axml的MvvmCross Light(Chimp)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"> 
    <Mvx.MvxListView /> 
</LinearLayout> 

給出了一個錯誤

"Binary XML file line #1: Error inflating class Mvx.MvxListView"

同樣的事情是Mvx.Spinner。 然而,在Activity.OnCreate從代碼實例化時:

_bindingContext = new MvxAndroidBindingContext(this, new LayoutInflaterProvider(LayoutInflater), _viewModel); 
var view = (LinearLayout)_bindingContext.BindingInflate(Resource.Layout.Main, null); 
SetContentView(view); 
var spinner = new MvxSpinner(this, null, new MvxAdapter(this, _bindingContext)); 
view.AddView(spinner); 

一切的偉大工程(包括綁定)。我究竟做錯了什麼?一般情況下是否支持這種情況? 或者,也許我應該參考除nuget MvvmCross.HotTuna.CrossCore以外的其他任何東西?

P.S.沒有發現任何樣品自定義控件和Crosslight公司既不github,也沒有對N+1 videos

回答

2

如果您想在非MvvmCross應用程序中使用命名空間縮寫,那麼您需要添加這些縮寫。這可以使用自定義綁定生成器或使用「輕」設置步驟等做:

var viewResolver = Mvx.Resolve<IMvxAxmlNameViewTypeResolver>(); 
    viewResolver.ViewNamespaceAbbreviations["Mvx"] = "Cirrious.MvvmCross.Binding.Droid.Views"; 
    viewResolver.ViewNamespaceAbbreviations["MyApp"] = "MyApp.Controls"; 

當全MvvmCross應用程序中這樣做,那麼你可以重寫Setup財產ViewNamespaceAbbreviations

protected override IDictionary<string, string> ViewNamespaceAbbreviations 
    { 
     get 
     { 
      var toReturn = base.ViewNamespaceAbbreviations; 
      toReturn["MyApp"] = "MyApp.UI.Droid.Controls"; 
      return toReturn; 
     } 
    } 
+0

我試圖使用基於github crosslight示例的「light」設置來縮寫工作,但我不知道在哪裏調用viewResolver。 – nicruo

+0

在我的'light'設置中使用Mvx.CallbackWhenRegistered工作。 – nicruo

1

當標記改爲使用完整的命名空間和layout_widthlayout_height屬性添加它開始工作了!

<Cirrious.MvvmCross.Binding.Droid.Views.MvxSpinner 
    android:id="@+id/MySpinner" 
    android:layout_width="fill_parent" 
    android:layout_height="20dp" 
    /> 

發現,當我切換到默認的Android吹氣,它是在抱怨缺少例外layout_width