为什么我的自动完成建议下拉列表是空白的

Why is my AutoComplete suggestion dropdown blank

我有一个 Xamarin 表单,我试图在其中添加 SyncFusion AutoComplete 控件。数据是一个简单的 class,只有三个字符串字段(CUSTNMBR、CUSTNAME、ZIP)。我希望它匹配任何字段并显示对应的 CUSTNMBR。这是我在 Xaml:

中的行
 <xForms:SfAutoComplete x:Name="customerAutoComplete" WidthRequest="120" BackgroundColor="White" />

在表单的代码隐藏构造函数中,我调用 LoadCustomerData():

private async void LoadCustomerData()
{
    customerAutoComplete.DataSource = await GetCustomerCodes();
    customerAutoComplete.DisplayMemberPath = "CUSTNMBR";
    customerAutoComplete.SelectedValuePath = "CUSTNMBR";
    customerAutoComplete.SuggestionMode = SuggestionMode.Custom;
    customerAutoComplete.Filter = FilterCustomers;
    customerAutoComplete.AutoCompleteMode = AutoCompleteMode.Suggest;
    customerAutoComplete.Watermark = "Zip Code, Customer ID, or Customer Name";
    customerAutoComplete.MinimumPrefixCharacters = 3;
}

这是我的过滤方法。

private bool FilterCustomers(string search, object customer)
{
    var text = customerAutoComplete.Text;

    if (customer != null)
    {
        var myCustomer = (OrganizationSearchDto)customer;
        if (myCustomer.CustName.Contains(text) || myCustomer.CustNmbr.Contains(text) ||
            myCustomer.Zip.Contains(text))
        {
            return true;
        }
    }

    return false;
}

当我有 customerAutoComplete.SuggestionMode = SuggestionMode.Contains 时,上面的代码部分工作,但它在其他两个字段上不匹配。现在它仍然运行,但是下拉列表中没有显示任何内容(空白)。为什么我的下拉列表是空白的?任何提示、建议或在正确方向上的努力将不胜感激。

对于遇到此问题的任何人,请进行测试:

  1. return true 上设置断点 - 您希望显示为建议的客户是否命中该断点?

  2. 交换 return true 和 return false,因此对于所有其他客户都是如此 - 与您想要的相反。看看它是否仍然是空白的。如果是,则不是过滤器 - 其他地方的代码干扰了显示。需要显示更多代码,或者制作一个 github 包含显示问题的最小回购协议。

  3. [来自 OP] 问题是 DisplayMemberPath 上的 属性 名称区分大小写,过滤器检查也是如此。

过滤器的修复是忽略所有地方的大小写。例如

if (myCustomer.CustName.ToLower().Contains(text.ToLower()) || ...)

我们已经分析了报告的查询。我们已经通过使用以下代码片段实现了要求,

public bool ContainingSpaceFilter(string search, object item)
{
    if (item != null)
    {
        var myCustomer = item as Employee;

        if (**myCustomer.Name.ToUpper().Contains(search.ToUpper()**) || myCustomer.ID.Contains(search) ||
   myCustomer.ZipCode.Contains(search))
        {
            return true;
        }
    }

    return false;
}