Dziś będzie o Item Controls. Mamy tego trochę więc na pewno nie dam rady opisać tego w jednym wpisie, ale nie traćmy czasu. Zaczynajmy.

Podstawy

Kontrolki ItemsControls charakteryzują się tym, iż udostępniają właściwość Items (typu ItemsCollection) za pomocą której możemy dostać się przechowywanych w tej kontrolce elementów. Każdy element w tej kolekcji jest typu object co powoduje, że nasze kolekcje mogą przyjmować dowolne elementy. Jeśli element dziedziczy po klasie UIElement jest renderowany, zgodnie ze swoim wyglądem, w przypadku obiektów innych typów – rysowane są wynik metody ToString() jako TextBlock.

ListBox

Tak jak pisałem wcześniej elementy w kolekcji Items są typu Object, nikogo nie powinna dziwić taka konstrukcja ListBox’a:

<ListBox>

    <Button Content=”Przycisk”/>

    <WpfExamDemo:MyClass />

    <System:DateTime>4-4-2009System:DateTime>

    <CheckBox Content=”CheckBox”/>

ListBox>

Jednak właściwość Items jest ReadOnly więc nie możemy za jej pomocą wskazać źródła danych. Możemy tylko dodawać ręcznie elementy do kolekcji. Jeżeli chcemy przypisać źródło elementów do ListBox’a musimy posłużyć się właściwością ItemSource. Inne właściwości ListBox’a to:

  • HasItems – pozwala zweryfikować czy ListBox zawiera jakieś elementy
  • IsGrouping – pozwala stwierdzić czy ListBox jest w trybie grupowania elementów (tak, tak pozwala na to)
  • DisplayMemberPath – umożliwia podanie właściwości, które zostanie użyta do wyświetlania obiektu.

Możemy napisać:

<ListBox x:Name=”listBox” DisplayMemberPath=”DayOfWeek”>

    <System:DateTime>4-4-2009System:DateTime>

    <System:DateTime>5-4-2009System:DateTime>

    <System:DateTime>6-4-2009System:DateTime>

    <System:DateTime>7-4-2009System:DateTime>

ListBox>

I zobaczymy jako wynik kolejne dni tygodnia. Co jeśli na liście znajdowałby się element, który nie ma właściwości DayOfWeek? Mielibyśmy pusty element na liście w tym miejscu. Przydatna cecha. Dodatkowo nie musi ona zawierać prostego łańcucha znaków. Może być to coś bardziej skomplikowane jak: List[0].Text – a zatem wspiera wielokrotne właściwości i indeksowanie. ListBox oczywiście zawiera także właściwości znane z WinForms takie jak: SelectedIndex, SelectedItem, SelectedValue Dodatkowo mamy dwie właściwośći typu Attached.

  • IsSelected – pozwala ustawić, że dany element jest zaznaczony
  • IsSelectionActive – (do odczytu) pozwala stwierdzić czy zaznaczony element ma focus

W następnym wpisie trochę o tym, jak możemy sprawić, aby ListBox sortował, grupował i filtrował naszą kolekcję elementów.