maui-devexpress-dot-maui-dot-editors-952193a6.md
A data provider that supplies suggestions for the AutoCompleteEdit in async mode.
Namespace : DevExpress.Maui.Editors
Assembly : DevExpress.Maui.Editors.dll
NuGet Package : DevExpress.Maui.Editors
public class AsyncItemsSourceProvider :
ItemsSourceProviderBase
Follow the steps below to supply items to the editor in asynchronous mode:
AsyncItemsSourceProvider to the editor and handle its ItemsRequested event.You can also specify the following options:
The provider cancels the previous request if a new request is submitted. You can use the CancellationToken event argument to cancel the previous request.
<dxe:AutoCompleteEdit.ItemsSourceProvider>
<dxe:AsyncItemsSourceProvider
CharacterCountThreshold="1"
RequestDelay="500"
ItemsRequested="OnAsyncItemsSourceProviderItemsRequested"/>
</dxe:AutoCompleteEdit.ItemsSourceProvider>
void OnAsyncItemsSourceProviderItemsRequested(object sender, ItemsRequestEventArgs e) {
e.RequestAsync = async () => await Task.Delay(3000).ContinueWith(task => this.employees.Where(employee => employee.FullName.Contains(e.Text)));
}
The example below uses the AsyncItemsSourceProvider to supply suggestions for the AutoCompleteEdit.
<dxe:AutoCompleteEdit LabelText="State"
PlaceholderText="Type here to search..."
VerticalOptions="Center"
Margin="16,0">
<dxe:AutoCompleteEdit.ItemsSourceProvider>
<dxe:AsyncItemsSourceProvider ItemsRequested="OnDelegateRequested" />
</dxe:AutoCompleteEdit.ItemsSourceProvider>
</dxe:AutoCompleteEdit>
using System.Collections.Generic;
using System.ComponentModel;
using Microsoft.Maui.Controls;
namespace AutoCompleteEditExample {
public partial class MainPage : ContentPage {
public MainPage() {
InitializeComponent();
States = new List<string>();
States.AddRange(new string[] { "California", "Colorado", "Connecticut" /*...*/ });
}
public List<string> States { get; }
void OnDelegateRequested(object sender, ItemsRequestEventArgs e) {
e.Request = () => {
return States.Where(i => i.StartsWith(e.Text, StringComparison.CurrentCultureIgnoreCase)).ToList();
};
}
}
}
The example below uses the AsyncItemsSourceProvider to supply items for the AutoCompleteColumn:
<dxg:DataGridView ItemsSource="{Binding Path=Employees}">
<dxg:DataGridView.Columns>
<dxg:AutoCompleteColumn FieldName="JobTitle">
<dxg:AutoCompleteColumn.ItemsSourceProvider>
<dxe:AsyncItemsSourceProvider ItemsRequested="ItemsRequested"
RequestDelay="500"
CharacterCountThreshold="2"/>
</dxg:AutoCompleteColumn.ItemsSourceProvider>
</dxg:AutoCompleteColumn>
</dxg:DataGridView.Columns>
</dxg:DataGridView>
using System.Collections.Generic;
using System.ComponentModel;
using Microsoft.Maui.Controls;
namespace DemoCenter.Forms.Views {
public partial class FirstLookView : ContentPage {
public FirstLookView() {
InitializeComponent();
BindingContext = new EmployeesRepository();
}
private void ItemsRequested(object sender, ItemsRequestEventArgs e) {
EmployeesRepository employeesRepository = BindingContext as EmployeesRepository;
e.Request = () => {
return employeesRepository.JobTitles.Where(i => i.StartsWith(e.Text, StringComparison.CurrentCultureIgnoreCase)).ToList();
};
}
}
public class EmployeesRepository {
public IList<Employee> Employees { get; set; }
public IList<string> JobTitles { get; set; }
}
public class Employee {
public string JobTitle { get; set; }
}
}
System.Object BindableObject ItemsSourceProviderBase AsyncItemsSourceProvider
Yield<AsyncItemsSourceProvider>()
YieldIfNotNull<AsyncItemsSourceProvider>()
See Also