MvxAutoCompleTextView在PatialText上失去绑定

时间:2015-01-09 22:18:57

标签: c# android mono mvvmcross

我正在使用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

2 个答案:

答案 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;
        }