以编程方式使用父级的属性添加MvxSpinner

时间:2014-07-17 07:43:23

标签: android mvvm xamarin mvvmcross android-custom-view

我有自定义视图(MyCustomView),其中我想添加MvxSpinner和一些TextView。我想将所有绑定放在自定义视图上并将它们传递给MvxSpinner,因此我可以使用下面的示例将此新组件集成到我的应用程序中,每次使用不同的绑定。

E.g。

in xml

<MyCustomView
    android:width="match_parent"
    android:height="match_parent"
    local:MvxItemTemplate="@layout/item_spinner_dark"
    local:MvxBind="ItemsSource StampTypes"
    local:MvxDropDownItemTemplate="@layout/spinner_dropdown_item" />

现在,在代码中,我想使用MvxSpinner的{​​{1}}添加IAttributesof

MyCustomView

上面的代码编译并运行,但根据public class MyCustomView : MvxRelativeLayout { private MvxSpinner _spinner; private TextView _errorTxt; // A bunch of constructors public MyCustomView (Context context, IAttributeSet attrs, IMvxAdapterWithChangedEvent adapter) : base(context, attrs, adapter) { // Create an MvxSpinner with the attributes // IMvxAdapterWithChangedEvent is always null if(adapter == null){ _spinner = new MvxSpinner(context, attrs); } else { _spinner = new MvxSpinner(context, attrs, adapter); } // Add View to the Layout AddView(_spinner); // Add a TextView _errorTxt = new TextView(context); _errorTxt.SetPadding(8, 8, 8, 8); _errorTxt.SetTextAppearance(context, Android.Resource.Attribute.TextAppearanceLarge); _errorTxt.SetTextColor(Android.Graphics.Color.Red); AddView(_errorTxt); } } 没有填充MvxSpinner。当我删除MyCustomView并直接使用MvxSpinner时,所有工作都按预期工作。下面是一个普通的MvxSpinner(就像魅力一样)和MyCustomView的结果的截图,其中MvxSpinner没有显示任何项目。

Example, without binding

起初,我认为使用IAttributes创建MvxSpinner会起到作用。但是,IMvxAdapterWithChangedEvent参数为null,因此我试图自己创建适配器。我错过了什么?

问题: 那么,我如何使用这些local:MvxBind="ItemsSource StampTypes"以编程方式创建MvxSpinner

注意:我从RelativeLayout扩展,因为当我从MvxSpinner扩展时,我无法在视图中添加TextView。

1 个答案:

答案 0 :(得分:1)

我认为你不能使用MvxRelativeLayout做你想做的事。

提供了

MvxRelativeLayout以允许您绑定相对布局中的项目集合 - 它不是为您手动插入项目而设计的。

您可以通过以下方式获得符合“可重用控制”要求的内容: