Wpis z mikrobloga

#csharp #wpf #programowanie

Ughh, im dalej w WPF, tym bardziej mam dość tego trivial-hard / hard-trivial. Pół dnia spędziłem żeby udało mi się zrobić #!$%@? WaitIndicator (czyli po prostu kręcące się kółeczko z napisem "Loading, Please Wait" oznaczające w wolnym tłumaczeniu "Zostaw #!$%@? ten telefon, poczekaj chwilę i daj żyć serwisowi").

Ktoś by pomyślał, że takie proste bezargumentowe gówienko powinno być jak MessageBox. Odpalane z dowolnego miejsca dowolnej klasy w całej aplikacji przez WaitIndicator.Show("Proszę czekać", "Trwa ładowanie") i zamykane przez WaitIndicator.Close(). No ale nie może tak być, bo byłoby to zbyt oczywiste.

Musimy to gówno wsadzić w widok i ukryć. Potem z tego widoku musimy to przechwycić do VM i trzymać sobie wskaźnik na to w VM i odpalać Show(), Close(). Oczywiście o customizacji choćby napisów możemy zapomnieć, bo jest hardkodowana w XAMLu w innym formularzu, który jest maczetą oddzielony nie dość że od swojego właściciela (bo jest wsadzony w SplashScreen jakiś), to już w ogóle poinformowanie o jego istnieniu VM właściciela to niezły maraton uśmiechu. Komunikacja jest przez interfejs który rozumie tylko "Show" i "Close", no i #!$%@?.

A jedyne co chciałem zrobić to stworzyć generyczny ekran ładowania, który raz by miał pasek ładowania, raz by nie miał, czasem jakieś napisy by się zmieniały, aby informować co on tam w ogóle ładuje w danej chwili itd. Po prostu jeden generyk, zrobić raz a potem bindować do dowolnych VMów właścicieli z odpowiednim property. Odpowiednio pobawić się templatami, triggerami i innym szajsem, żeby dało się z tego jednego forma ulepić niemal cokolwiek i tyle. To powinna być robota na max 1-2 h, a ja nadal nie wiem jak mam to osiągnąć po połowie dniówki ( ͡° ʖ̯ ͡°)