Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android MvxAutoCompleteTextView下拉列表在每次按键时都会重新打开_Android_Xamarin_Mvvmcross_Autocompletetextview - Fatal编程技术网

Android MvxAutoCompleteTextView下拉列表在每次按键时都会重新打开

Android MvxAutoCompleteTextView下拉列表在每次按键时都会重新打开,android,xamarin,mvvmcross,autocompletetextview,Android,Xamarin,Mvvmcross,Autocompletetextview,我有一个问题,用户每次按一次键,AutoCompleteTextView就会快速隐藏并再次显示(带有一组更新的值) 请建议我的问题可能在哪里,以及您是否看到以下代码存在任何其他问题 视图中的绑定: bindingSet .Bind(emailAutoCompleteTextView) .For(t => t.Text) .To(vm => vm.Email); bindingSet .Bind(emailAutoCompleteTextView)

我有一个问题,用户每次按一次键,AutoCompleteTextView就会快速隐藏并再次显示(带有一组更新的值)

请建议我的问题可能在哪里,以及您是否看到以下代码存在任何其他问题

视图中的绑定:

bindingSet
   .Bind(emailAutoCompleteTextView)
   .For(t => t.Text)
   .To(vm => vm.Email);

bindingSet
    .Bind(emailAutoCompleteTextView)
    .For(t => t.PartialText)
    .To(vm => vm.CurrentEmailEntry);

bindingSet
    .Bind(emailAutoCompleteTextView)
    .For(t => t.ItemsSource)
    .To(vm => vm.CurrentEmailAutoCompleteSuggestions);
AXML布局:

<mvvmcross.droid.support.v7.appcompat.widget.MvxAppCompatAutoCompleteTextView
    android:id="@+id/EmailAutoCompleteTextView"
    android:layout_marginTop="@dimen/PaddingBetweenUserInputFields"
    android:completionThreshold="1"
    android:inputType="textEmailAddress" />

查看模型代码:

private string _currentEmailEntry;

public string CurrentEmailEntry
{
    get
    {
        return _currentEmailEntry;
    }
    set
    {
        _currentEmailEntry = value;

        if (value == string.Empty)
        {
            _currentEmailEntry = null;
        }

        CurrentEmailAutoCompleteSuggestions = _emailAutoCompleteList
            .Where(email => email.StartsWith(_currentEmailEntry, StringComparison.OrdinalIgnoreCase))
            .ToArray();

        RaisePropertyChanged(nameof(CurrentEmailEntry));
    }
}        

private static readonly string[] _emailAutoCompleteList = {"Gordon", "Gordy", "Go", "Freeman", "Is", "Alive"};

private IList<string> _currentEmailAutoCompleteSuggestions = _emailAutoCompleteList.ToList();

public IList<string> CurrentEmailAutoCompleteSuggestions
{
    get { return _currentEmailAutoCompleteSuggestions; }
    set
    {
        if (ReferenceEquals(_currentEmailAutoCompleteSuggestions, value))
            return;

        _currentEmailAutoCompleteSuggestions = value;

        RaisePropertyChanged(nameof(CurrentEmailAutoCompleteSuggestions));
    }
} 
private string\u currentEmailEntry;
公共字符串CurrentEmailEntry
{
得到
{
返回当前电子邮件条目;
}
设置
{
_currentEmailEntry=值;
if(值==string.Empty)
{
_currentEmailEntry=null;
}
CurrentEmailAutoCompleteSuggestions=\u emailAutoCompleteList
.Where(email=>email.StartsWith(_currentEmailEntry,StringComparison.OrdinalIgnoreCase))
.ToArray();
RaisePropertyChanged(名称(CurrentEmailEntry));
}
}        
私有静态只读字符串[]\u emailAutoCompleteList={“Gordon”、“Gordy”、“Go”、“Freeman”、“Is”、“Alive”};
private IList_currentEmailAutoCompleteSuggestions=_emailAutoCompleteList.ToList();
公共IList当前电子邮件自动完成建议
{
获取{return\u currentEmailAutoCompleteSuggestions;}
设置
{
if(ReferenceEquals(_currentEmailAutoCompleteSuggestions,value))
返回;
_currentEmailAutoCompleteSuggestions=值;
RaisePropertyChanged(名称(CurrentEmailAutoCompleteSuggestions));
}
} 
我使用MvvmCross 4.0(升级不是选项)


注意:我尝试使用
ObservableCollection
而不是
IList
并删除/添加项目(不重新分配集合本身),但在此之后,
CurrentEmailEntry
的setter在用户在文本视图中键入第一个字符后停止接收值。
MvxFilteringAdapter
中的代码似乎在等待重置事件时卡住了。

因为这里或MvvmCross Xamarin Slack通道上都没有人应答,我最终自己找到了解决方案

正是重新创建了绑定到
ItemsSource
的列表,才导致了这种奇怪的行为

使用
Clear()/Add()
而不是重新创建的
observateCollection
确实是一条路。上一个问题段落中描述的卡住行为(等待重置事件)是由于没有正确的线程调度(我的应用程序是多线程的)造成的

当我用总是在UI线程上引发
CollectionChanged
事件的代理集合包装我的可观察集合时,问题就消失了


为了子孙后代的利益,我把这个问题留在这里。

因为在这里或MvvmCross Xamarin Slack频道上都没有人回答,我最终自己找到了解决方案

正是重新创建了绑定到
ItemsSource
的列表,才导致了这种奇怪的行为

使用
Clear()/Add()
而不是重新创建的
observateCollection
确实是一条路。上一个问题段落中描述的卡住行为(等待重置事件)是由于没有正确的线程调度(我的应用程序是多线程的)造成的

当我用总是在UI线程上引发
CollectionChanged
事件的代理集合包装我的可观察集合时,问题就消失了

为了子孙后代的利益,把这些留在这里