This example illustrates how to add chips with predefined filters (and apply pre-defined filters against data displayed in the DevExpress .NET MAUI CollectionView control).
Related Controls and Their Properties:
- FilterChipGroup: ItemsSource, SelectedItems, DisplayMember
- DXCollectionView: ItemsSource, FilterString, ItemTemplate
-
This project uses the FilterChipGroup control to display chips with predefined filters. The FilterChipGroup.ItemsSource property is bound to the PredefinedFilters collection. Each item in this collection contains a value and corresponding display text. The value is specified using Criteria Language Syntax.
<dxe:FilterChipGroup ItemsSource="{Binding PredefinedFilters}" SelectedItems="{Binding SelectedFilters, Mode=TwoWay}"
public class MainViewModel : BindableBase { string filter; public ObservableCollection<FilterItem> PredefinedFilters { get; set; } public BindingList<FilterItem> SelectedFilters { get; set; } public MainViewModel() { SelectedFilters = new BindingList<FilterItem>(); PredefinedFilters = new ObservableCollection<FilterItem>() { new FilterItem(){ DisplayText= "Today", Filter = "IsOutlookIntervalToday([CreatedDate])" }, new FilterItem(){ DisplayText= "Last Week", Filter = "IsThisWeek([CreatedDate])" }, new FilterItem(){ DisplayText= "Drafts", Filter = "[IsDraft] == True" }, new FilterItem(){ DisplayText= "< $1000", Filter = "[Price] < 1000" }, new FilterItem(){ DisplayText= "> $4000", Filter = "[Price] > 4000" }, }; }
-
The FilterChipGroup.SelectedItems property returns a
BindingList
. You can handle the BindingList.ListChanged event to update a filter condition. In the event handler, create the filter string and pass it to the FilterString property.<dxcv:DXCollectionView FilterString="{Binding Filter, Mode=TwoWay}" ...
public class MainViewModel : BindableBase string filter; public BindingList<FilterItem> SelectedFilters { get; set; } public string Filter { get { return filter; } set { filter = value; RaisePropertiesChanged(); } } private void SelectedFiltersChanged(object sender, ListChangedEventArgs e) { if (SelectedFilters.Count > 0) Filter = String.Join(" AND ", SelectedFilters.Select(f => f.Filter)); else Filter = string.Empty; } }