Artykuły dla tagu WPF

freeimages.com
gru 03 2015
0

Templated control - gdy ważna jest wydajność

Ostatnio przy jednym z projektów służbowych, musiałem zrobić layout, który obejmowałby zagnieżdżanie kontrolek ListView. Poziomy scroll przesuwał elementy głównej listy, natomiast w każdym takim obiekcie, znajdował się panel zawierający pewne określone dane + kolejny ListView przesuwany już wertykalnie. Nie byłoby w tym nic nadzwyczajnego, gdyby nie fakt, że wewnętrzne kontrolki ListView, zawierały w sobie listę elementów na których znaleźć można było kontrolki użytkownika. Szybko okazało się, że to był błąd, bo w praktyce takie kontrolki w dużej ilości są strasznie nie wydajne, nawet przy zastosowanej wirtualizacji.

Na szczęście w porę przypomniałem sobie o innym rodzaju kontrolek, który pozwolił mi zaoszczędzić nawet kilkadziesiąt megabajtów pamięci i znacznie przyspieszył ładowanie widoku:-)

freeimages.com
paź 22 2015
0

Biblioteki warte poznania w C# - Conditional XAML

W swojej stosunkowo krótkiej karierze programistycznej, zdążyłem już pracować z różnymi technologiami. Naturalnym tego następstwem są oczywiście wszelkiej maści porównania. Czasem np. porównuje Razora z MVC do XAMLa. I choć w teorii bardziej rozbudowana jest ta druga z obu tych technologii, to w praktyce Razor ma kilka konstrukcji, do których tęsknym okiem wyglądają designerzy XAMLa. Jedną z nich jest IF. I choć w teorii można ją częściowo zastąpić choćby za pomocą VisualStates, to w praktyce okazuje się, że istniejące rozwiązania, nie zawsze są do końca optymalne, ale od czego są dodatkowe biblioteki;-) Powitajcie Conditional XAML - prostą bibliotekę, która skrywa olbrzymie możliwości.

freeimages.com
paź 15 2015
0

MVVM Light - wykorzystanie messengera w komunikacji

Czasem tworząc aplikację wykorzystującą XAML, chcielibyśmy przekazywać dane pomiędzy poszczególnymi stronami. Niestety technologie Microsoftu nie są do tego dobrze przygotowane. Co prawda możemy zawsze wykorzystać jakiś globalny obiekt kontekstu, ale w praktyce jest to rozwiązanie nieefektywne. Możemy również wykorzystać foldery lokalne/roaming, który opisywałem tutaj, ale w pewnym sensie strzelamy tutaj do muchy z armaty. Czy można to zrobić jakoś prosto i elegancko? Okazuje się, że tak - choć po części zależy to od używanych przez Was bibliotek.

Jakiś czas temu opisywałem na łamach tego blogu MVVM Light, która upraszcza wdrożenie modelu MVVM w wielu technologiach Microsoftu, a oprócz tego skrywa w sobie kilka fajnych funkcji. Dziś chciałbym opisać jedną z nich - Messengera, który może być swego rodzaju mostkiem informacyjnymi pomiędzy ViewModelami umieszczonymi w naszej aplikacji.

freeimages.com
lip 26 2015
0

Więcej MVVM w Universal Apps dzięki Behaviors SDK

Technologie typu WPF, czy Universal Apps aż proszą się o zastosowanie MVVM, jednak wsparcie dla tej architektury po stronie tych rozwiązań, jest umówmy się - co najwyżej średnie. Bardzo mało kontrolek posiada wbudowaną obsługę komend. I nawet jeśli się ona pojawia, to i tak nie dotyczy ona wszystkich dostępnych w kontrolce zdarzeń. Poza tym, nie ma jawnego wsparcia dla ViewModeli. Standardowo zbudowana aplikacja składa się ze stron wykorzystujących code-behind.

Na szczęście oba te problemy można w pewnym sensie dość mocno zmarginalizować. O tym drugim pisałem już trochę przy okazji tekstu poświęconego bibliotece MVVM Light. Ten pierwszy jest odrobinę bardziej skomplikowany, ale również można go stosunkowo łatwo obejść. Wystarczy tylko włączyć w projekcie rozszerzenie Behaviors SDK, a następnie dokonać odpowiedniej implementacji:-) Nad tym właśnie tematem skupię się w dzisiejszym tekście.

Na koniec wstępu, jeszcze mała uwaga techniczna. Przykłady zostały napisane pod kątem systemu Windows Phone 8.1 (UA), ale z zaprezentowanych tutaj rozwiązań można skorzystać również w aplikacjach pisanych dla Windows 8.1, czy WPF:-)

freeimages.com
cze 26 2015
0

Ciekawe możliwości kontrolki TextBlock

Język znaczników XAML, jest integralnym elementem kilku ważnych technologii Microsoftu. Pojawia się on: w sukcesywnie upadającym Silverlighcie, WPFie, Windows Phonie, czy też w aplikacjach uniwersalnych. Dlatego też jeśli poznacie jedno z wymienionych wyżej środowisk, to bardzo łatwo będzie się Wam przestawić na dowolną z pozostałych technologi.

W zależności od środowiska, mogą pojawiać się pewne delikatne różnice w możliwościach jakie dostarczy nam XAML, ale mimo wszystko jest naprawdę sporo rzeczy wspólnych - ot choćby podstawowe kontrolki.

Jedną z takich kontrolek jest pozornie prosty TextBlock, który w praktyce skrywa w sobie spore możliwości. Jakie? Na te pytanie postaram się odpowiedzieć trochę szerzej w dalszej części tekstu;-)

freeimages.com
maj 29 2015
0

Efektywne tworzenie GRIDów w XAMLu

XAML - czyli tzw. rozszerzalny język znaczników, jest motorem napędowym wielu technologi stworzonych przez Microsoft. Spotkać go można m.in. w Silverlighcie, WPFie, czy też katowanych ostatnio przeze mnie na blogu aplikacjach uniwersalnych. I choć między tymi technologiami jest sporo istotnych różnic, to w praktyce są one częściowo ze sobą zbieżne właśnie dzięki XAMLowi.

Tworząc frontend w WPF, można bardzo szybko złapać o co chodzi w aplikacjach uniwersalnych - i vice versa. Oczywiście poszczególne kontrolki mogą się różnić pomiędzy konkretnymi implementacjami, ale jest też kilka takich elementów, które albo są takie same, albo zachowują się bardzo podobnie. Do tej właśnie grupy można zaliczyć tytułowego GRIDa, który w praktyce jest moim ulubionym kontenerem do budowania efektywnych layoutów. W dzisiejszym tekście postaram się Wam przedstawić kluczowe jego elementy, które można wykorzystać w codziennej pracy.

freeimages.com
sty 02 2015
0

Biblioteki warte poznania w C# - Fody

Programowanie nigdy nie było łatwe i szybkie, ale największe wyzwania stoją przed tymi, którzy chcą stworzyć prosty, czytelny, elastyczny i wydajny kod. Czy da się zawsze ładnie połączyć wszystkie elementy tej układanki? Niestety nie, ale to nie oznacza, że powinniśmy łatwo się poddawać.

W moim odczuciu kluczem do sukcesu, powinna być ciągła refaktoryzacja oraz re-używanie wcześniej napisanego kodu. W praktyce okaże się, że każdy projekt można poprawić. Zawsze znajdzie się coś, co można by zrobić lepiej. Dlaczego o tym wszystkim piszę? Powód jest prosty. Chciałbym Wam zaprezentować interesującą bibliotekę, która z pewnością pozwoli Wam na pewną optymalizację napisanego wcześniej kodu. Poznajcie Fody - bibliotekę która modyfikuję IL w czasie procesu budowania aplikacji.

maj 06 2012
0

C# - Interfejsy które warto znać

W obecnym czasie, z bardzo rozwiniętymi środowiskami programistycznymi, takimi jak choćby Visual Studio, czy też Eclipse, bardzo łatwo jest rozpocząć swoją przygodę z programowaniem, które w tym przypadku czasem bardziej przypomina zabawę z klockami, niż rzeczywiste klepanie kodu.

Jednak nastawiając się na bezmyślne składanie klocków, szybko można obudzić się z przysłowiową ręką w nocniku, w sytuacji gdy zajdzie potrzeba modyfikacji lub rozszerzenia tak radośnie tworzonego kodu, a warto zaznaczyć, że nieumiejętnie sklejony kod może wymagać całkowitej reorganizacji, czy wręcz nawet przepisania w sytuacji gdy zajdzie potrzeba rozszerzenia bieżących funkcjonalności oprogramowania.

Jak sobie zatem z wszystkim poradzić? Przede wszystkim warto sięgnąć po wzorce projektowe, o których na łamach Alt Control Delete już nie raz wspominałem. Pomocne będą również tytułowe interfejsy przygotowane przez twórców języka, które jak dobrze wiadomo leżą u podstaw Polimorfizmu, a odpowiednio zastosowane mają naprawdę spory sens i możliwości - znacznie większe niż by się z pozoru wydawało.

Dziś postaram się zatem przedstawić Wam kilka interfejsów, które mnie osobiście szczególnie okazały się przydatne.

lut 17 2012
0

C#, WPF oraz SQLite razem w jednym projekcie

Tworząc aplikację, która operuje na jakichkolwiek danych, które mają być dostępne również w przyszłości, szybko dochodzimy do momentu, kiedy to musimy wybrać odpowiedni sposób składowania tych danych.

Po szybkim namyśle, przyjdzie Wam z pewnością kilka propozycji:

  • Tekstowy plik danych o określonej strukturze
  • Plik XML (można korzystać z serializacji)
  • Baza danych

Każde z tych rozwiązań ma swoje określone wady i zalety, a wszystko zależy również od skali projektu. W moim przypadku miałem właśnie do czynienia ostatnio raczej ze stosunkowo nie dużą aplikacją. Z miejsca odrzuciłem pierwsze dwa rozwiązania, ponieważ wymagają one raczej złożonego przetwarzania plików, a dodatkowo chciałem mieć łatwy dostęp do danych i łatwą możliwość zbindowania.

Idealnym rozwiązaniem wydawała się być baza danych, jednak wymagała by ona instalacji serwera baza danych, co przy skali projektu byłoby grą nie wartą świeczki - więc kolejne pudło.

Troszkę już zrezygnowany, przypomniałem sobie o SQLite, który w tym przypadku okazał się strzałem w dziesiątkę i rozwiązywał wszystkie moje problemy.

gru 31 2011
0

Implementacja BackgroundWorker w WPF

Czy kiedykolwiek zdarzyło się Wam spotkać z aplikacją, która podczas przetwarzania jakiś bardziej złożonych i czasochłonnych operacji, zamrażała swoje okno w sposób, który skutecznie blokował Waszą pracę?

Czy nie zdarzało się Wam również w takich sytuacjach ujrzeć pełny optymizmu napis Brak odpowiedzi?

Podejrzewam że każdy z Was, przynajmniej raz spotkał się z taką sytuacją. Być może część z Was przeklinała system operacyjny, choć w istocie to nie była do końca jego zasługa. Bardziej winny w takiej sytuacji był niestety programista, który z niewiedzy/braku czasu/cwaniactwa (niepotrzebne skreślić) nie zaimplementował wielowątkowości w swojej aplikacji.

Być może wielu programistów, boi się po prostu tego zagadnienia, choć w gruncie rzeczy jest ono całkiem proste w implementacji. W przypadku gdy korzystamy z aplikacji napisanych w WPF/Silverlight i chcemy skorzystać z dodatkowego wątku, który nie będzie blokować naszego interfejsu UI, to w takim celu, świetnie sprawdzi się tytułowy BackgroundWorker.

1 2