MvxItemTemplate 中的 MvvmCross MvxSpinner
MvvmCross MvxSpinner in MvxItemTemplate
我正在使用 Xamarin 和 MvvmCross 创建和 Android 应用程序。我希望能够在 MvxItemTemplate 中使用 MvxSpinner。我无法填充 ItemsSource。 Item 的 DataContext 是列表中的项目而不是 ViewModel。将整个建议列表添加到列表中的每个项目似乎效率低下。有没有一种方法可以将 ItemsList 与项目的数据上下文分开?有没有办法将项目静态添加到 axml 视图?
...经过一整天的努力,我发现如果我使用香草微调器,我可以通过 xml 属性设置项目列表:
android:entries="@array/TagColors"
如果我这样做,我无法绑定到结果,但是如果我使用 MvxSpinner,我可以绑定到 SelectedItem,但不能使用 android:entries 来填充我的列表。有人知道这里有快乐的媒介吗?
好的,这就是我的做法。它可能真的很脏,但它有效,所以我继续前进。我从名为 ShipmentInventory 的 WCF 服务获取一个对象。此对象包含 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 创建对象的命名空间中即可。由于数组被声明为静态的,我很确定它只有一个实例。我对此很陌生,所以如果有人认为我不这样做的原因,请告诉我。否则,我希望这对以后的人有所帮助。
我正在使用 Xamarin 和 MvvmCross 创建和 Android 应用程序。我希望能够在 MvxItemTemplate 中使用 MvxSpinner。我无法填充 ItemsSource。 Item 的 DataContext 是列表中的项目而不是 ViewModel。将整个建议列表添加到列表中的每个项目似乎效率低下。有没有一种方法可以将 ItemsList 与项目的数据上下文分开?有没有办法将项目静态添加到 axml 视图?
...经过一整天的努力,我发现如果我使用香草微调器,我可以通过 xml 属性设置项目列表:
android:entries="@array/TagColors"
如果我这样做,我无法绑定到结果,但是如果我使用 MvxSpinner,我可以绑定到 SelectedItem,但不能使用 android:entries 来填充我的列表。有人知道这里有快乐的媒介吗?
好的,这就是我的做法。它可能真的很脏,但它有效,所以我继续前进。我从名为 ShipmentInventory 的 WCF 服务获取一个对象。此对象包含 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 创建对象的命名空间中即可。由于数组被声明为静态的,我很确定它只有一个实例。我对此很陌生,所以如果有人认为我不这样做的原因,请告诉我。否则,我希望这对以后的人有所帮助。