我正在使用Xamarin和MvvmCross创建Android应用程序。我希望能够在MvxItemTemplate中使用MvxSpinner。我无法填充ItemsSource。 Item的DataContext是列表中的项而不是ViewModel。将整个建议列表添加到列表中的每个项目似乎效率低下。有没有办法将ItemsList与项目的datacontext分开填充?有没有办法将项目静态添加到axml视图?
...在整天工作之后,我发现如果我使用香草微调器,我可以通过xml属性设置项目列表:
android:entries="@array/TagColors"
如果我这样做,我无法绑定到结果,但是如果我使用MvxSpinner,我可以绑定到SelectedItem,但不能使用android:条目来填充我的列表。有谁知道这里有一个幸福的媒介?
答案 0 :(得分:1)
好的,我是这样做的。这可能真的很脏,但它确实有效,所以我继续前进。我从名为ShipmentInventory的WCF服务中获取了一个对象。此Object包含ShipmentInventoryItem的ObservableCollection。这个可观察的集合是我绑定到ListView的东西:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Mvx.MvxListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
local:MvxBind="ItemsSource ShipmentInventory.Items"
local:MvxItemTemplate="@layout/inventoryitemview" />
<FrameLayout
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/frameLayout2" />
<EditText
android:inputType="date"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editText1" />
</LinearLayout>
这使用InventoryItemView作为MvxListView的模板,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<MvxSpinner
android:layout_width="300dp"
android:layout_height="match_parent"
android:layout_margin="5dp"
android:padding="2dp"
local:MvxBind="ItemsSource TagColors; SelectedItem TagColor"
android:id="@+id/spinner1" />
<EditText
android:layout_width="300dip"
android:layout_height="wrap_content"
style="@style/InputEditText"
local:MvxBind="Text InventoryNumber" />
<EditText
android:layout_width="300dp"
android:layout_height="wrap_content"
style="@style/InputEditText"
local:MvxBind="Text Articles" />
</LinearLayout>
所以诀窍是让ShipmentInventoryItem拥有一个包含颜色列表的TagColors属性。从WCF服务返回这一点的想法并不是很吸引人。然后我记得svcutil.exe创建了一堆部分类来创建每个对象。好吧,如果他们能做到,我也可以:)这是我添加到我的DataModel代码:
public partial class ShipmentInventoryItem
{
private static string[] _TagColors = { "Yellow", "Brown", "White", "Blue", "Orange", "Red", "Green", "Purple" };
public string[] TagColors
{
get { return _TagColors; }
}
}
它像冠军一样工作。确保它位于WCF创建对象的命名空间中。由于数组被声明为静态,我很确定它只有一个实例。我是新手,所以如果有人看到我不这样做的原因,请告诉我。否则,我希望将来可以帮助某人。