Interfejs INotifyPropertyChangedPropertyChanged znany jest prawdopodobnie każdemu programiście C#. Interfejs ten zawiera jedynie jedno zdarzenie public event PropertyChangedEventHandler PropertyChanged; które powinniśmy odpalić w momencie gdy dana właściwość zostanie przez nas zmieniona. Dzięki temu dowolny obiekt, który będzie nasłuchiwał zmian danej właściwości zostanie o tym poinformowany. Przykładowa klasa implementująca ten interfejs może wyglądać w następujący sposób: public class ViewMode...
Tak jak wspomniałem w poprzednim wpisie, tym razem zajmiemy się tworzeniem własnej klasy implantującej interfejs ICommand . 1. Implementacja interfejsu ICommand - WPF Klasa implementująca ICommand może wyglądać w następujący sposób public class DelegateCommand : ICommand { private Action
Wstęp Każdy programista, który napisał chociaż parę linijek kody w WinFormsach wie, że kontrolki używają eventów do powiadamiania o zmianach swojego stanu. W przypadku, gdy interesuje nas odpowiednia reakcja na zdarzenie, podpinamy się do niego odpowiednią funkcją i wykonujemy założone przez nas operację. W analogiczny sposób można postępować w WPF-ie oraz w Silverlighcie, jednakże podejście takie niejako mija się z modelem MVVM. Posiadanie event handlerów w kodzie, ściśle wiąże nam widok (XAML) z code ...
Walidacja jest to technika sprawdzająca, czy dany obiekt spełnia pewne założenia poprawności danych. W WPF-ie oraz Silverlighcie istnieją trzy sposoby walidacji obiektów: walidacja poprzez rzucanie wyjątków, walidacja z użyciem interfejsu IDataErrorInfo, walidacja z użyciem interfejsu INotifyDataErrorInfo Walidacja poprzez rzucanie wyjątków Walidacja poprzez rzucanie wyjątków odbywa się w następujący sposób. W seterze danej właściwości dodajemy warunek sprawdzający czy wpisane dane są poprawne...
autor: Z dzisiejszej ankiety na FanPage'u dotnetomaniaka wynika, że sporo z nas na co dzień tworzy aplikacje ASP.NET (czy to WebForms czy też MVC). Zapewne zatem przyda nam się trochę darmowej wiedzy od Googla, co i jak wpływa na wyniki wyszukiwania i PR. Czy wiesz np. jak robot Google traktuje adresy z '-' a adresy z '_'? Jest jakaś różnica a może nie ma? Czy adresy z '/' na końcu są lepsze od tych bez? Czy dodawanie www do domeny ma jakieś znaczenie? Na te i inne pytania odpowie...
Wbudowany mechanizm optymalizacji może czasami przynieść zaskakujące wyniki. Rozważmy poniższy fragment kodu:string var1 ="text"; string var2 ="text"; bool condition =object.ReferenceEquals(var1, var2); Wydawałoby się, że var1 i var2 stanowią dwie osobne referencje. Po uruchomieniu kodu przekonamy się jednak, że zmienna condition będzie miała wartość true. Spowodowane jest to wykonaną optymalizacją, polegającą na tym, że .NET przechowuje zbiór użytych w programie napisów. Deklarując zmienną przec...
Trigery jest to mechmizm WPF-a służący reakcji UI na jakieś zdarzenie. Wyróżniamy cztery rodzaje triggerów Property triggers - używane do zareagowanie na zmiany dependency property w danej kontrolce, Data triggers - używane do zareagowanie na zmiany w bindowanych obiektach- można podłączyć się do właściwości z DataContextu jak i z danej kontrolki, MultiDataTriggers - używane do reagowania na zmiany kilku właściwości, MultiTrigger - używane do reagowania na zmiany kilku dependecy property w danej ...
ListViewCollection (WPF) ListViewCollection jest to kolekcja wprowadzona do WPF-a, która wspiera sortowanie, grupowanie oraz filtrowanie. Kolekcję taką tworzymy w następujący sposób List
autor: Dawno już nie pisałem nic o rozwiązaniach kolaboracyjnych, czas wrócić do kontunuacji serii. Wcześniej popełniłem dwa wpisy o: instalacji SharePoint Foundation 2010 oraz wyborach między SharePoint Foundation i Office 365. Teraz czas na instalacje “DUŻEJ” maszyny, czyli SharePoint Server 2010. W nastepnych postach przyjrzymy się już bliżej pewnych szczególnym aspektom – mając środowisko. WPROWADZENIE Zastanówmy się przez chwile jakie wersje tego środowiska mamy i czym się one różnią (poza ceną ocz...
Używając kontrolki WebBrowser na telefonie Windows Phone mogliście się spotkać z błędnym kodowaniem znaków w trakcie używania metody NavigateToString. Podczas standardowego nawigowania przy użyciu metody Navigate do pliku lokalnego albo zewnętrznego wszystko działa poprawnie. Natomiast użycie metody NavigateToString powoduje dziwną interpretację znaków:
Mobile development 4743 dni, 5 godzin, 8 minut temu 49 źrodło rozwiń
NULL Object Pattern (Special Case)
Architektura 4743 dni, 10 godzin, 17 minut temu 186 źrodło rozwiń
W komentarzach do ostatniego posta wywiązała się dyskusja na temat "a co z metodami prywatnymi?". Odpowiedź najkrótsza z możliwych brzmi: NIC. Zainteresowanych odsyłam do tamtejszych wypowiedzi, a w niniejszej notce postaram się zawarte tam myśli rozwinąć. Zaczynając przygodę z testami jednostkowymi często stawałem przed dylematem "jak mam przetestować funkcjonalność z metod prywatnych?". Sporo się naszukałem i naczytałem o różnych rozwiązaniach, z czego dwa zdawały się być najpopularniejsze i najbardzi...
Ponieważ często jestem pytany oto z jakich materiałów korzystałem oraz jak długo pracowałem nad Silverlightem zanim przystąpiłem do egzaminu certyfikacyjnego, postanowiłem napisać o tym artykuł. Na wstępie jednak zaznaczam, że nie mogę ujawniać jakichkolwiek informacji z samego egzaminu (w szczególności pytań!). Nie zrobię tego ani na blogu ani poprzez e-mail....
Silverlight 4743 dni, 10 godzin, 17 minut temu 235 źrodło rozwiń
W kodzie często używamy klasy Stirng do przechowywania poufnych informacji takich jak np. hasło. Niestety często nie zdajemy sobie sprawy jak niebezpieczne jest takie rozwiązanie. String jest specjalnie zoptymalizowaną klasą przeznaczoną do przechowywania łańcucha znaków, która jednak nie jest odporna na wszelkie ataki związane z podglądaniem pamięci operacyjnej. W skrócie pisząc, wszelkie informacje klasa String trzyma w postaci jawnej. Korzystając więc z odpowiedniego oprogramowania, intruz może bez pr...
Architektura 4743 dni, 10 godzin, 17 minut temu 313 źrodło rozwiń
autor: Platforma .NET, dzięki mechanizmowi refleksji, pozwala na dynamiczne wczytywanie do programu podzespołów (ang. assembly). Pozwala to w łatwy sposób pisać rozszerzane przy pomocy pluginów aplikacje i na wiele innych rzeczy. Ostatnio potrzebowałem wykorzystać ten mechanizm do własnych celów. Aby zwiększyć bezpieczeństwo, postanowiłem ładować podzespoły do odzielnych domen aplikacyjnych. W ten sposób, jeśli po załadowaniu podzespołu i wykonaniu jego kodu pojawi się błąd, główna domena aplik...
Poszukując sposobów automatycznego testowania aplikacji natrafiłem na ciekawą funkcjonalność Visual Studio 2010 Ultimate. Mianowicie w tej wersji naszego ulubionego IDE znalazło się miejsce na nowy typ testów - Coded UI Test. Coded UI Test jest to automatyczny test UI, który tworzymy poprzez nagrywanie akcji jakie wykonujemy w naszej aplikacji. Nie musimy pisać ani jednej linijki kodu żeby przetestować jakąś funkcjonalność naszego programu. Jedyne co musimy zrobić jest to przejście przez wszystkie niezbę...
Każdy z nas w trakcie zawodowej kariery miał (nie)przyjemność pracować z systemami kontroli wersji. Codziennie w trakcie swojej pracy wrzucamy, pobieramy z nich pliki, rozwiązujemy konflikty. Wiemy po co je używać, ale czy wiemy jak? Tak jak w każdej dziedzinie życia pewne rzeczy można robić lepiej lub gorzej. W tym artykule postaram się pokazać kilka dobrych zasad ciągłej integracji (Continuous Integration), które pozwolą usprawnić trochę ten proces. Na koniec przedstawię przykład jak w...
Architektura 4745 dni, 18 godzin, 47 minut temu 63 źrodło rozwiń
Na blogu oraz MSDN pisałem niejednokrotnie o testach jednostkowych oraz integracyjnych. Ostatnio jednak zastanawiałem się nad podstawowym problemem – jak zorganizować to od strony struktury katalogowej? Musimy rozważyć następujące problemy:Testy powinny być w każdej chwili dostępnie do odpalenia i weryfikacji.Wykonując prostą refaktoryzację (zmiana nazwy klasy), automatycznie nazwa powinna zaktualizować się w testach.Testy jednostkowe stanowią dobrą dokumentację oraz instrukcję używania zaimplementowanej...
Dzisiaj będę się chwalił się swoją niewiedzą. Kilka dni temu kolega zadał mi pytanie, którym skutecznie mnie zagiął. Ponieważ uważam, że głupotą nie jest brak wiedzy co raczej udawanie, że się ją posiada, czym prędzej się Wam tym pytaniem chwalę. Co zostanie wyświetlone po takim kodzie i dlaczego? string string1 = "Test"; string string2 = string1; string string3 = "Test"; Console.WriteLine(Equals(string1, string2)); // 1. Console.WriteLine(Equals(string1, string3)); // 2. Console.WriteLine(ReferenceE...
Na tak postawione pytanie aż chciałoby się odpowiedzieć: "testować wszystko, you fool!". Życie uczy jednak, że takie podejście jest bardzo niepraktyczne i na dłuższą metę nie ma sensu. Dążenie do pokrycia 100% kodu mija się z celem i jest po prostu stratą czasu. O powodach pisania testów pisałem na początku tego cyklu. Są jednak miejsca, w których koszt napisania testu jest bardzo duży, a jego wartość - znikoma. Zacznijmy więc od odpowiedzi na trudniejsze pytanie. Czego nie testować?