【发布时间】:2022-01-11 22:09:19
【问题描述】:
我有一个 Xamarin 表单,我试图在其中添加一个 SyncFusion AutoComplete 控件。数据是一个简单的类,只有三个字符串字段(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 时,上面的代码部分工作,但它在其他两个字段上不匹配。现在它仍在运行,但下拉列表中没有显示任何内容(其空白)。为什么我的下拉菜单是空白的?我们将不胜感激任何提示、建议或正确方向的努力。
【问题讨论】:
-
如果您在
return true上设置断点,那么您希望它显示的客户是否到达了该行?感谢您确认(并在问题中说明)它在使用 SuggestionMode.Contains 时部分有效 - 这是找出问题所在的良好第一步。我没有看到任何明显的错误(尽管我没有使用过同步融合)。 -
@ToolmakerSteve 是的,它到达了断点。
-
我不喜欢从构造函数(不是异步环境)调用异步方法。我认为这不是问题(因为
Contains版本运行正常),但GetCustomerCodes是否正在调用服务器?如果是这样,您是否对硬编码数据进行了测试,以便它可以立即返回? -
另一个测试:交换
return true和return false,所以对于所有其他客户来说都是如此 - 与您想要的相反。看看它是否仍然是空白的。这将改变我们需要寻找问题的地方。另外:将整个内容包装在一个 try-catch 中,并在 catch 块中设置一个断点(可能将return false;放在那里)。以防其中一项出现问题。 -
@ToolmakerSteve 谢谢,你帮我找到了错误。 1.)
DisplayMemberPath上的属性名称区分大小写。 2.) 我的过滤器检查也区分大小写。您引导我完成了导致我得到答案的步骤,所以请回答一下,以便我接受。
标签: c# xamarin.forms syncfusion