mvvmcross之MVVMCross Xamarin (Android) 中的自动完成

qq78292959 阅读:146 2025-02-15 21:57:57 评论:0

我正在尝试在基于 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陷阱


标签:Android
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号