Lekce 4 - Interface pro kontakt, Adaptee Wrapper a komparátor - ISIM
ISIMContact.cs
Nejprve si navrhneme předlohu našeho kontaktu - jeho vlastnosti
public interface ISIMContact { string id { get; } string name { get; set; } Global.Availability availability { get; set; } string protocol { get; } bool unreadedMessage { get; set; } object contactObject { get; } }
Ten se poté bude dědit a udělá se tzv. Adapter Wrapper návrhový vzor: http://www.itnetwork.cz/…avrhovy-vzor Jde o to, že máme třídu, která je podle naší předlohy, obsahuje dané vlastnosti a původní objekt kontaktu z dané knihovny.
Aby jsi měl nějakou představu jak to bude vypadat:
public class TestContact : ISIMContact { CizíTřídaKontaktu kontakt; public TestContact(CizíTřídaKontaktu kontakt) { this.kontakt = kontakt; this.name = kontakt.P_NAME; this.availability = Global.Converter.GetContactAvailability(kontakt.P_STATUS); this.unreadedMessage = false; } public string id { get { return kontakt.P_IDENTIFICATOR; } } public string name { get; set; } public Global.Availability availability { get; set; } public string protocol { get { return "Testovací"; } } public bool unreadedMessage { get; set; } public object contactObject { get { return null; } } }
Komparátor bude fungovat jednoduše, dostupnost se seřadí dle priority (integer) a za to se přiřadí jméno. Pak se použije stringový komparátor a pohodička:
/// <summary> /// Porovnává nejdřív podle dostupnosti a pak podle jména. Jednoduše přičte ke jménu dostupnost a porovná -> 1David. Je to do 6tky takže neřešim :P /// </summary> public class ISIMcontactComparer : IComparer { public int Compare(object x, object y) { int result = -1; try { string c1 = (int)(x as ContactListViewItem).contact.availability + (x as ContactListViewItem).contact.name; string c2 = (int)(y as ContactListViewItem).contact.availability + (y as ContactListViewItem).contact.name; result = string.Compare(c1, c2); } catch (NullReferenceException) { result = -1; } return result; } }
Kontakt listu se pak přiřadí následovně:
contactListView.ListViewItemSorter = new ISIMcontactComparer();