我正在使用MvxAutoCompleTextView并且我已经确认ItemsSource和SelectedObject被正确绑定并正常工作(我添加了一些代码,当窗口小部件获得焦点时,它会执行ShowDropDown并确定预期的项目在那里)。
当我开始输入以过滤列表时,问题就开始了。第一次,ItemsSource被正确过滤。但我注意到有时它只根据一些打字字符进行过滤。有时它是第一个角色,有时它是第一个角色2.基本上是一个命中和想念的东西。下面是一个示例堆栈跟踪...
01-09 13:33:37.145 D/AbsListView( 3098): onDetachedFromWindow
[0:]
01-09 13:33:37.185 D/AbsListView( 3098): Get MotionRecognitionManager
mvx:Diagnostic:116.54 Wait starting for ac
01-09 13:33:37.395 I/mono-stdout( 3098): mvx:Diagnostic:116.54 Wait starting for ac
[0:] mvx:Diagnostic:116.54 Wait starting for ac
[0:]
mvx:Diagnostic:116.82 Wait finished with 772 items for ac
[0:] mvx:Diagnostic:116.82 Wait finished with 772 items for ac
01-09 13:33:37.745 I/mono-stdout( 3098): mvx:Diagnostic:116.82 Wait finished with 772 items for ac
[0:]
mvx:Diagnostic:117.03 Wait starting for ac
[0:] mvx:Diagnostic:117.03 Wait starting for ac
01-09 13:33:37.805 I/mono-stdout( 3098): mvx:Diagnostic:117.03 Wait starting for ac
01-09 13:33:38.025 D/AbsListView( 3098): onDetachedFromWindow
01-09 13:33:38.095 D/AbsListView( 3098): Get MotionRecognitionManager
你可能会注意到“等待开始时间”等等。当我输入acc。
我还注意到,只要它第一次过滤并添加其他文本以进一步过滤列表,就不会调用绑定到PartialText的属性的setter。退格时会发生同样的事情。
<MvxAutoCompleteTextView
android:id="@+id/autoComplete"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_marginLeft="5dp"
android:layout_gravity="center_vertical|left"
android:completionThreshold="1"
local:MvxItemTemplate="@layout/template_autocomplete"
local:MvxBind="ItemsSource Hazards; PartialText SearchTerm; SelectedObject SelectedHazard"
style="@style/edit_text.medium.fill" />
这里是绑定到PartialText的属性:
private string _searchTerm;
public string SearchTerm
{
get { return _searchTerm; }
set
{
_searchTerm = value;
RaisePropertyChanged(() => SearchTerm);
Filter();
}
}
我做错了什么?我错过了什么吗?
我希望我能清楚地解释清楚。提前谢谢。
干杯!
的Jaime
答案 0 :(得分:4)
Android的AutoCompleteTextView是一个真正的PITA。你可能会看到&#34;绑定到PartialText的属性的setter永远不会被调用。&#34;是因为控件仍在等待ItemsSource从之前的更改中更新。
我遇到了同样的问题并在此处回答,PartialTextChanged stops firing on MvxAutoCompleteTextView after Item selection。基本上,对PartialText 的每次更改都必须导致对ItemsSource的更改。
当你看到&#34; mvx:诊断:等待YOURPARTIALTEXT&#34;但没有匹配&#34; mvx:诊断:116.82等待完成......&#34;
WRT您的搜索有时候是一个字符我建议将Debug.WriteLine添加到SearchTerm和Debug.WriteLine的setter中,围绕Filter中的搜索调用。在某个地方,您将在错误的时间更新并响应SearchTerm更改。
P.S。你可能已经这样做但是为了以防万一,不要使用VS输出窗口来观察调试输出。使用Android设备日志窗口并按&#34; stdout&#34;
过滤专利
答案 1 :(得分:1)
可能因为链接器没有设置绑定吗?在这种情况下,您可以将它添加到LinkerPleaseInclude.cs文件中,如下所示:
public void Include(MvxAutoCompleteTextView text)
{
text.TextChanged += (sender, args) => text.Text = "" + text.Text;
text.PartialTextChanged += (sender, args) => text.Text = "" + text.Text;
text.SelectedObjectChanged += (sender, args) => text.Text = "" + text.Text;
}