Intersoft.Client.UI.Data Namespace > UXDataComboBox Class : FilterDescriptors Property |
<CategoryAttribute("Common Properties")> Public Property FilterDescriptors As CompositeFilterDescriptorCollection
Dim instance As UXDataComboBox Dim value As CompositeFilterDescriptorCollection instance.FilterDescriptors = value value = instance.FilterDescriptors
[CategoryAttribute("Common Properties")] public CompositeFilterDescriptorCollection FilterDescriptors {get; set;}
[CategoryAttribute("Common Properties")] public: property CompositeFilterDescriptorCollection^ FilterDescriptors { CompositeFilterDescriptorCollection^ get(); void set ( CompositeFilterDescriptorCollection^ value); }
UXPageableComboBox provides a flexible way to display a collection of data in a single or multiple columns layout. Similar to UXDataComboBox, you need to input the query into UXPageableComboBox and handle the query using the QueryDescriptor component model. The control is designed with MVVM-ready architecture so that you can write the user interaction code entirely in the ViewModel including the implementation for paging feature.
Notice that you only need to bind the FilterDescriptors in the XAML and handle the QueryChanged in your ViewModel. UXPageableComboBox will automatically provide the filter descriptors based on FilterMemberPath, FilterOperator and user's input query.
When the PageDescriptor is larger than 0, this indicates that the control is requesting more data to be retrieved. As seen in the code above, you should add the new items to the existing collection instead of assigning the result to the initial collection property. This approach allows incremental data loading which significantly improves performance even for very large data scenario.
If the FilterMemberPath property is not specified, UXDataComboBox will use DisplayMemberPath for the filtering purpose. |
The following code shows how to use FilterDescriptors on UXPageableComboBox.
XAML |
Copy Code
|
---|---|
<Intersoft:UXPageableComboBox SearchResult="{Binding Customers}" FilterDescriptors="{Binding LookUpDescriptor.FilterDescriptors, Mode=TwoWay}" SortDescriptors="{Binding LookUpDescriptor.SortDescriptors, Mode=TwoWay}" PageDescriptor="{Binding LookUpDescriptor.PageDescriptor}" DisplayMemberPath="ContactName" StatusBarVisibility="True"> <Intersoft:UXPageableComboBox.DataContext> <ViewModels:CustomerViewModel/> </Intersoft:UXPageableComboBox.DataContext> </Intersoft:UXPageableComboBox> |
C# |
Copy Code
|
---|---|
using System; using System.Collections; using Intersoft.Client.Data.ComponentModel; using Intersoft.ClientUI.Samples.DataControls.ModelServices; namespace Intersoft.ClientUI.Samples.DataControls.ViewModels { public class CustomerViewModel : ViewModelBase { #region Constructors public CustomerViewModel() { this.CustomersSource = CustomersRepository.Instance; this.Presenter = new MessagePresenter(); this.LookUpDescriptor = new QueryDescriptor(); // Initialize Sort Descriptor this.LookUpDescriptor.SuspendQueryChanged = true; this.LookUpDescriptor.SortDescriptors.Add(new SortDescriptor() { PropertyName = "ContactName", Direction = ListSortDirection.Ascending }); this.LookUpDescriptor.SuspendQueryChanged = false; } #endregion #region Fields private IEnumerable _customers; private QueryDescriptor _lookUpDescriptor; #endregion #region Properties protected IDataRepository CustomersSource { get; set; } public IEnumerable Customers { get { return this._customers; } set { if (_customers != value) { _customers = value; OnPropertyChanged("Customers"); } } } public QueryDescriptor LookUpDescriptor { get { return _lookUpDescriptor; } set { if (_lookUpDescriptor != value) { if (_lookUpDescriptor != null) _lookUpDescriptor.QueryChanged -= new EventHandler(OnLookUpQueryChanged); _lookUpDescriptor = value; _lookUpDescriptor.QueryChanged += new EventHandler(OnLookUpQueryChanged); OnPropertyChanged("LookUpDescriptor"); } } } protected virtual MessagePresenter Presenter { get; private set; } #endregion #region Methods private void OnLookUpQueryChanged(object sender, EventArgs e) { this.CustomersSource.GetData ( this.LookUpDescriptor, (customers) => { if (this.LookUpDescriptor.PageDescriptor.PageIndex > 0) { ObservableCollection<object> items = this.Customers as ObservableCollection<object>; foreach (var customer in customers) { items.Add(customer); } } else { ObservableCollection<object> items = new ObservableCollection<object>(customers.Cast<object>()); this.Customers = items; } }, (totalItemCount) => { if (totalItemCount != -1) this.LookUpDescriptor.PageDescriptor.TotalItemCount = totalItemCount; }, (error) => { this.Presenter.ShowErrorMessage( "An exception has occurred during data loading\n." + "Message: " + error.Message + "Stack Trace: " + error.StackTrace); } ); } #endregion } } |
Target Platforms: Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2