Binding InputPanel with ObservableCollection
Collection binding can be implemented in InputPanel using ObservableCollection which works similar to a regular collection. To bind InputPanel to an ObservableCollection, the ObservableCollection<T> class is used to obtain a collection, which acts as a binding source and then the ItemsSource property gets this collection to bind it to the InputPanel control.
Perform the following steps for data binding using ObservableCollection<T> class:
- Set up the application
- Create a data source for InputPanel
- Bind InputPanel to ObservableCollection
Set up the application
- Create a WPF application.
- Add the InputPanel control to the application and name it 'InPanel'.
Back to Top
Create a data source for InputPanel
- Add a new class, Employee, to the application.
- Add the data generators and fields to the class.
' ** fields
Private m_id As Integer, cid As Integer
Private m_first As String, m_last As String
Private m_father As String
Private m_occupation As EOccupation
Private m_active As Boolean
Private m_hired As DateTime
Private m_weight As Double
' ** data generators
Shared rnd As New Random()
Shared firstNames As String() = "Andy|Ben|Charlie|Dan|Ed|Fred|Gil".Split("|"c)
Shared lastNames As String() = "Ambers|Bishop|Cole|Danson|Evers|Trask|Ulam".Split("|"c)
Shared countries As String() = "China|India|United States|Japan|Myanmar".Split("|"c)
// ** fields
int id, cid;
string first, last;
string father;
EOccupation occupation;
bool active;
DateTime hired;
double weight;
// ** data generators
static Random rnd = new Random();
static string[] firstNames = "Andy|Ben|Charlie|Dan|Ed|Fred|Gil".Split('|');
static string[] lastNames = "Ambers|Bishop|Cole|Danson|EversTrask|Ulam".Split('|');
static string[] countries = "China|India|United States|Japan|Myanmar".Split('|');
- Add properties to the class using the following code.
Public Property ID() As Integer
Get
Return m_id
End Get
Set(value As Integer)
If value <> m_id Then
m_id = value
End If
End Set
End Property
Public ReadOnly Property Name() As String
Get
Return String.Format("{0} {1}", First, Last)
End Get
End Property
Public ReadOnly Property Country() As String
Get
Return countries(cid)
End Get
End Property
Public Property CountryID() As Integer
Get
Return cid
End Get
Set(value As Integer)
If value <> cid AndAlso value > -1 AndAlso
value < countries.Length Then
cid = value
End If
End Set
End Property
Public Property Occupation() As EOccupation
Get
Return m_occupation
End Get
Set(value As EOccupation)
If value <> m_occupation Then
m_occupation = value
End If
End Set
End Property
Public Property Active() As Boolean
Get
Return m_active
End Get
Set(value As Boolean)
If value <> m_active Then
m_active = value
End If
End Set
End Property
Public Property First() As String
Get
Return m_first
End Get
Set(value As String)
If value <> m_first Then
m_first = value
End If
End Set
End Property
Public Property Last() As String
Get
Return m_last
End Get
Set(value As String)
If value <> m_last Then
m_last = value
End If
End Set
End Property
Public Property Hired() As DateTime
Get
Return m_hired
End Get
Set(value As DateTime)
If value <> m_hired Then
m_hired = value
End If
End Set
End Property
Public Property Weight() As Double
Get
Return m_weight
End Get
Set(value As Double)
If value <> m_weight Then
m_weight = value
End If
End Set
End Property
' some read-only stuff
Public ReadOnly Property Father() As String
Get
Return m_father
End Get
End Property
' ** utilities
Private Shared Function GetString(arr As String()) _
As String
Return arr(rnd.[Next](arr.Length))
End Function
' ** static value providers
Public Shared Function GetCountries() As String()
Return countries
End Function
Public Shared Function GetFirstNames() As String()
Return firstNames
End Function
Public Shared Function GetLastNames() As String()
Return lastNames
End Function
public int ID
{
get { return id; }
set
{
if (value != id)
{
id = value;
}
}
}
public string Name
{
get { return string.Format("{0} {1}",
First, Last); }
}
public string Country
{
get { return countries[cid]; }
}
public int CountryID
{
get { return cid; }
set
{
if (value != cid && value > -1 &&
value < countries.Length)
{
cid = value;
}
}
}
public EOccupation Occupation
{
get
{
return occupation;
}
set
{
if (value != occupation)
{
occupation = value;
}
}
}
public bool Active
{
get { return active; }
set
{
if (value != active)
{
active = value;
}
}
}
public string First
{
get { return first; }
set
{
if (value != first)
{
first = value;
}
}
}
public string Last
{
get { return last; }
set
{
if (value != last)
{
last = value;
}
}
}
public DateTime Hired
{
get { return hired; }
set
{
if (value != hired)
{
hired = value;
}
}
}
public double Weight
{
get { return weight; }
set
{
if (value != weight)
{
weight = value;
}
}
}
// some read-only stuff
public string Father
{
get { return father; }
}
// ** utilities
static string GetString(string[] arr)
{
return arr[rnd.Next(arr.Length)];
}
// ** static value providers
public static string[] GetCountries() { return countries; }
public static string[] GetFirstNames() { return firstNames; }
public static string[] GetLastNames() { return lastNames; }
- Create a constructor of Employee class and add the following code to it.
Private values As Array = [Enum].GetValues(GetType(EOccupation))
Public Sub New(id__1 As Integer)
ID = id__1
First = GetString(firstNames)
Last = GetString(lastNames)
CountryID = rnd.[Next]() Mod countries.Length
Occupation = CType(values.GetValue(rnd.[Next](values.Length - 1)), EOccupation)
Active = rnd.NextDouble() >= 0.5
Hired = DateTime.Today.AddDays(-rnd.[Next](1, 365))
Weight = 50 + rnd.NextDouble() * 50
m_father = String.Format("{0} {1}", GetString(firstNames), Last)
End Sub
Array values = Enum.GetValues(typeof(EOccupation));
public Employee(int id)
{
ID = id;
First = GetString(firstNames);
Last = GetString(lastNames);
CountryID = rnd.Next() % countries.Length;
Occupation = (EOccupation)
(values.GetValue(rnd.Next(values.Length - 1)));
Active = rnd.NextDouble() >= .5;
Hired = DateTime.Today.AddDays(-rnd.Next(1, 365));
Weight = 50 + rnd.NextDouble() * 50;
father = string.Format("{0} {1}",
GetString(firstNames), Last);
}
- Create a method, GetEmployeeList, of ObservableCollection<T> class using the following code.
' ** static list provider
Public Shared Function GetEmployeeList(count As Integer) _
As ObservableCollection(Of Employee)
Dim list = New ObservableCollection(Of Employee)()
For i As Integer = 0 To count - 1
Dim emp As New Employee(i)
list.Add(emp)
Next
Return list
End Function
// ** static list provider
public static ObservableCollection<Employee>
GetEmployeeList(int count)
{
var list = new ObservableCollection<Employee>();
for (int i = 0; i < count; i++)
{
Employee emp = new Employee(i);
list.Add(emp);
}
return list;
}
Back to Top
Bind InputPanel to ObservableCollection
- Add the following code to bind the InputPanel control with data using the ItemsSource property.
InPanel.ItemsSource = Employee.GetEmployeeList(50)
InPanel.ItemsSource = Employee.GetEmployeeList(50);
- Press F5 to run the application.
Back to Top