Podstawy używania MVVM-Light
- Intialize DispatcherHelper w funkcji Application_Startup danego pliku App.cs za
- Tworzenie ViewModels z klasy bazowej
- Zawsze Utwórz klasę ViewModelLocator, który zawiera wszystkie Państwa zdanie modele i jest połączony w aplikacji Zasoby
- Użyj funkcji RelayCommands, aby odsłonić funkcje widoku
- Dowiedz się, kiedy należy korzystać z DispatchHelper.
Clean-Up Pomysły:
- W razie potrzeby, dodać do swojej ViewModel wyczyścić DomainContext za EntitySet na Cleanup()?
- Zadzwoń do funkcji CleanupSomeVM() ViewModelLocator, aby wyczyścić viewmodels, gdy nie są już aktywnie potrzebne w aplikacji.
Chciałbym usłyszeć od innych o tym, kiedy/jak korzystać z funkcji CleanUp. Wraz z rozwojem mojej aplikacji czuję potrzebę dodania funkcji czyszczenia, aby lepiej zarządzać wykorzystaniem pamięci klienckiej.
Dla Blendability:
- streszczenie Wdrożenia życzenie/zapytanie do interfejsu.
- Utwórz 2 klasy dla każdej klasy implementacji usług (1 dla projektu, 1 dla produkcji).
- W każdym modelu ViewModel należy wdrożyć własną klasę usług (używając IsInDesignMode), aby w razie potrzeby utworzyć implementacje usługi Blendable Service.
- Użyj zmiennej statycznej, aby zatrzymać obiekt DomainContext w klasie Implmentacja usługi.
- Dodaj DispatcherHelper.Initialize() w konstruktorze ViewModels, ale tylko w trybie projektowania. Blend nie ładuje aplikacji podczas ładowania strony, a to działa.
dla dodatkowej logiki biznesowej:
- Dodaj działalności logikę w modelu, potem w ViewModel.
- Użyj częściowych metod modelu, aby dodać logikę dla odpowiednich zdarzeń zmiany/aktualizacji.
- Dodaj właściwości tylko do odczytu (tylko pobierający), aby podać sumaryczne i obliczone wartości w modelu.
Dla Wyświetleń:
- Zawsze Bind korzeń do obiektu Locator.
- Staraj się utrzymywać logikę kodową tylko do układu lub niestandardowej logiki interfejsu użytkownika. Unikaj odwoływania się do swojego ViewModel.
kolekcje:
- Zastosowanie CollectionViewSource dla kolekcji w swoim ViewModels, ze źródłem DomainContext za EntitySet
- Zastosuj wszystko Filtrowanie, sortowanie i grupowanie Logic do CollectionViewSource w Twojej ViewModel.
- Po ServiceCalls, wywołaj .View.Refresh() na swoich obiektach CollectionViewSource, jeśli jest to konieczne, aby zaktualizować interfejs użytkownika.
Dla ViewModel koordynacji (Logic Controller)
- używać funkcji wiadomości oszczędnie, za dużo złożoność może być trudna do opanowania.
- Użyj klas NotificationMessage i PropertyChangedMessage do wysyłania/odbierania za pomocą.
Dla RIA DomainServices:
- realizacji wszelkich zalogowaniu funkcji utrzymują się zmienia, a nie aktualizacja/insert/delete logiki.
- Podczas wstawiania, aktualizowania i usuwania funkcji, jeśli chcesz odwołać się do innego elementu za pośrednictwem właściwości nawigacji, najpierw sprawdź element EntityStatus lub załaduj obiekt z innego kontekstu, aby zapobiec konfliktom EntityStatus.
do debugowania/testowania:
- Sprawdź okna wyjściowego do wiązania błędy i je naprawić. Błędy wiązania nie działają w sposób dyskretny dla użytkownika, ale pogarszają wydajność aplikacji i oczekiwane zachowanie.
- Tworzenie testów jednostek w Silverlight do zweryfikowania wszelkich dodanych modelu/logiki biznesowej
- Tworzenie projektu jednostki testowej do testowania logiki po stronie serwera i funkcji
Dla Entity Framework:
- Przechowywać 1- do-1 Dopasowanie encji do usługi domenowej. Próba podziału w inny sposób powoduje problemy.
- NIE używaj atrybutu [Kompozycja], chyba że zamierzasz poświęcić dużo czasu na staranne budowanie logiki wstawiania, aktualizacji i usuwania.
- Użyj osobnej usługi do obsługi niestandardowych typów z powrotem do klienta RIA. Nie dodawaj ich do swojej usługi DomainService dla obiektu EntityFramework Obiekt
- Wykonuj po stronie serwera logikę aktualizacji/integracji (taką jak aktualizacja innych systemów) w funkcji PersistChangeSet, a nie w funkcjach wstawiania, aktualizacji, usuwania.Zapobiegnie to przypadkowemu wciągnięciu podmiotu za pośrednictwem właściwości nawigacji, co spowoduje, że twoja wersja nie zostanie zaktualizowana.
- Utwórz dodatkowy kontekst, aby znaleźć bieżące wartości podczas aktualizacji/integracji.
Rozważ przekształcenie tego na wiki społeczności, aby każdy mógł edytować. –
Nie uważam tego za com-wiki. Pytający zasługuje na reputację tego dobrego pytania. – Shimmy