Object Model
Syntax
Example
The following code shows how to use UXPageableComboBox to query and display the records in single column layout.
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
}
}
|
As seen in the example above, 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.
Remarks
Inheritance Hierarchy
Requirements
Target Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family, Windows Vista, Windows Server 2008 family
See Also