Winbot – dialog do edycji obiektów

Kolejną rzeczą, nad którą pracowałem w ramach mojego projektu Winbot, była edycja różnych obiektów za pomocą interfejsu użytkownika. W aplikacji występuje kilka typów obiektów. Mógłbym przygotować oddzielne kontrolki do edycji każdego typu z osobna, ale takie rozwiązanie mnie nie zadowalało. Za każdym razem kiedy chciałbym wprowadzić nowy typ, musiałbym dodatkowo przygotować nową kontrolkę do edycji. Byłoby to dość niewygodne i denerwujące. Moim celem było przygotowanie generycznej logiki, która pozwoliłaby na edycję różnych obiektów.

Jak zwykle zacząłem od przejrzenia aktualnych rozwiązań. Niestety moje poszukiwania przez długi czas były bezowocne. W końcu trafiłem na coś, co okazało się w sam raz do użycia dla tego scenariusza. Chodzi tu o kontrolkę PropertyGrid, rozwijaną w ramach projektu Extended WPF Toolkit. Kontrolka jest bardzo prosta w użyciu. Pozwala na edycję właściwości danego obiektu w tym kolekcji i obiektów zagnieżdżonych.

Jedyną wadą z jaką spotkałem się do tej pory jest brak możliwości zresetowania wszystkich swoich zmian i powrotu do stanu początkowego. Musiałem zastosować własną logikę, która pozwala na odtworzenie stanu obiektu w przypadku anulowania wprowadzonych modyfikacji. Wprowadziło to jednak dodatkowe ograniczenia. Klasa obiektu musi implementować interfejs ICloneable oraz posiadać atrybut Serializable. Rozwiązanie jest dość trywialne. Przed rozpoczęciem jakiejkolwiek edycji, dany obiekt jest klonowany za pomocą serializacji. Wszystkie zmiany odbywają się . Poniżej przedstawiam szkielet klasy spełniający założenia.

A tak wygląda gotowe rozwiązanie XAML + code behind.

Na koniec przykładowy interfejs użytkownika, jaki powstał dla obiektu posiadającego cztery właściwości i jedną kolekcję.

Interfejs do edycji kolekcji:

Dodaj komentarz

Twój adres email nie będzie opublikowany. Pola wymagane zostały oznaczone *