mvvmcross之MVVMCross Xamarin (Android) 中的自动完成
我正在尝试在基于 Xamarin Android 的布局中创建一个自动完成控件。我正在使用 MVVMCross。
我在片段中创建了以下 AXML 布局。
<TextView
android:text="Item"
android:layout_column="0"
android:id="@+id/textView42"
android:layout_height="28.6dp"
android:layout_width="86.9dp"
android:gravity="center"
android:layout_marginTop="17.5dp"
android:layout_marginRight="17.5dp" />
<AutoCompleteTextView
android:id="@+id/autocomplete_country"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
local:MvxBind="Adapter Items" />
我更新了我的 View 模型以返回一个字符串数组。
private string[] _items = new string[] { "DD", "DD2" };
public String[] Items
{
get { return this._items; }
set { this._items = value; RaisePropertyChanged<string[]>(() => this._items); }
}
我想我需要使用一个 ArrayAdapter,但是我不确定该怎么做。请提供一些可以帮助我继续进行的指导/指示。
我是 Xamarin 和 MVVMCross 的新手,所以我可能在这里遗漏了一些东西。
请您参考如下方法:
您不需要自定义适配器。切换到 MvxAutoCompleteTextView 并使用 MVVMCross 绑定(bind)。这是我如何使用它的示例。
<MvxAutoCompleteTextView
android:id="@+id/DrugName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:completionThreshold="1"
android:hint="Enter drug name..."
android:textSize="@dimen/text_size_xlarge"
local:MvxItemTemplate="@layout/item_drug_notclickable"
local:MvxBind="ItemsSource DrugSuggestions; PartialText DrugSearchTerm; SelectedObject Drug;"
android:layout_gravity="right" />
正如 Nikola 在评论中所说,您希望针对 Items 属性而不是私有(private)变量调用 RaisePropertyChanged。这适用于所有属性更改的调用。
使用自动完成需要注意的一件事是,对文本的更改必须导致对 ItemSource 的更改。查看此 GitHub 答案以获得完整解释,https://github.com/MvvmCross/MvvmCross/issues/945陷阱
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。