3

我有铸件问题。首先,我将举例说明如何在 Monodroid 中为没有 MVVM 的 AutoComplete 做一个自定义适配器:https ://github.com/BitStab/Monodroid-Custom-Auto-Complete/blob/master/MonoAndroidApplication1/CustomerAdapter.cs

现在我将在 MVVMCross 中尝试这个,但要做到这一点,我必须通过 Java.Lang.Object 扩展我的 ViewModel。这会破坏它的便携性。我现在正在寻找一种解决方法,因为我不是 mvvm 专家,我需要帮助。

我开始在 mvvmCross Bindigs 中做一些新的类,你可以在这里找到它:https ://github.com/BitStab/MvvmCross/tree/master/Cirrious/Cirrious.MvvmCross.Binding/Android/Views

我试图使其尽可能通用,但我需要一种方法将我的个人 C# 对象转换为 Java.Lang.Object。有没有一种方法可以在不扩展我的 ViewModel 的情况下做到这一点?如果有人有其他想法,我很乐意得到灵感!

谢谢您的帮助!

4

1 回答 1

3

如果您想要可移植的代码,那么您当然不希望在 ViewModel 附近有 Java.anything。

恐怕我无法真正遵循 CustomerAdapter 示例代码 - 您的过滤器和发布方法看起来不太正确。此外,在我发现的大多数 Java 示例之后,我遇到了一些问题——据我所见,我认为 AutoCompleteTextView 上的线程模型并不理想——它阻塞线程太久(恕我直言)。

但是,在对 Google Books API 示例进行了一些黑客攻击之后,我创建了一个示例 - 请参阅以下视频:

一 二 三

此示例使用MvvmCross 框架内的新alpha数据绑定 Autocomplete 类和适配器工作。可能这些类实际上从未成为全职框架成员 - 在这种情况下,它们可以改为存在于某些外部库中。

基本功能在 3 个新属性上使用数据绑定:

  • PartialText - 这是一个部分文本字符串 - 从 View 发送到 ViewModel
  • ItemsSource - 这是可用于提供的 PartialText 的当前项目集 - 从 ViewModel 发送到 View
  • SelectedObject - 这是当前选定的项目 - 从 View 发送到 ViewModel

您可以在绑定 xml 中看到这些设置:

<Mvx.MvxBindableAutoCompleteTextView
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  local:MvxItemTemplate="@layout/listitem_book"
  local:MvxBind="{'Text':{'Path':'EnteredText','Mode':'TwoWay'},
  'ItemsSource':{'Path':'AutoCompleteSuggestions'},
  'PartialText':{'Path':'CurrentTextHint'},
  'SelectedObject':{'Path':'CurrentBook'}}"
    />

请注意,由于 Android 线程模型,PartialText 中的每个更改都必须通过 ItemsSource 中的最终信号更改来满足 - 这应该是对象集合中的单个更改,而不是许多小的更改。

此初始示例的代码位于:https ://github.com/slodge/MvvmCross/tree/master/Sample%20-%20SimpleDialogBinding/SimpleBinding/DroidAutoComplete

请注意,此示例使用“简单绑定”而不是完整的 Mvx 框架,因此在 ViewModel 中需要考虑更多线程。

绑定视图及其适配器不是简单的代码——绑定代码本质上是相当抽象的——但它们可以在以下位置找到:


如果您正在做任何与网络相关的事情,那么从长远来看,我相信实施新的自动完成视图可能比今天使用内置的 Android 更好!

于 2012-05-12T00:35:30.510 回答