Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> c# WP7 - dziedziczenie
djbarca
post 2.07.2012, 21:22:11
Post #1





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

Ostrzeżenie: (0%)
-----


witam. poddaje się.. drugi dzien szukam rozwiązania i nic ;/ problem jest przy aplikacji mobilnej... mam przykladowo nowe okno z jakas strona aplikacji i mam klase glowna ktora dziedziczy po: PhoneAplicationPage , oraz mam druga klase ktora chcialbym sobie dolaczyc do klasy glownej - przyklad:


  1.  
  2. namespace dz.files
  3. {
  4. public class data
  5. {
  6. public data()
  7. {
  8.  
  9. }
  10. }
  11. public partial class przedmiotyLista : PhoneApplicationPage
  12. {
  13. public przedmiotyLista()
  14. {
  15. InitializeComponent();
  16. }
  17. }
  18. }


jak powinny wykladac klasy , zebym mogl w klasie glownej(przedmiotyLista) zaraz po PhoneApplicationPage mogl dziedziczyc rowniez klase data.. jesli spróbuje tak zrobi to wyswietla mi blad:


"Error 1 Class 'dz.files.przedmiotyLista' cannot have multiple base classes: 'Microsoft.Phone.Controls.PhoneApplicationPage' and 'data' C:\Users\pawel\Desktop\dz\dz\dz\files\przedmiotyLista.xaml.cs" ... pewnie okaze sie jak zwykle, ze rozwiazanie bylo banalne tylko ja glupi nie moglem go znalezc :/


Ten post edytował djbarca 2.07.2012, 21:24:47
Go to the top of the page
+Quote Post
batman
post 2.07.2012, 21:39:09
Post #2





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Nie tędy droga. Napisz co chcesz uzyskać, a będzie łatwiej znaleźć rozwiązanie.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
djbarca
post 2.07.2012, 21:44:55
Post #3





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

Ostrzeżenie: (0%)
-----


Mam jakaś tam aplikacje ktora zawiera np przedmioty i oceny .. zrobilem calosc na osobnych oknach. Opcja przedmioty i opcja oceny. Uklad plikow: http://scr.hu/6ip/hyfmw
.. no i teraz po wejsciu do pliku lista ocen albo/i po wejsciu do pliku z lista przedmiotow potrzebne mi sa te same funkcje. Teraz po prostu je skopiowalem ale to bez sensu..
Go to the top of the page
+Quote Post
batman
post 2.07.2012, 21:49:24
Post #4





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Z tego co napisałeś wnioskuję, że logikę trzymasz w code behind, a tam powinny znaleźć się tylko metody reagujące na jakieś zdarzenia. Przenieś logikę do nowej klasy (modelu) i w obsłudze zdarzenia wywołaj odpowiednią metodę z tego modelu.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
djbarca
post 2.07.2012, 21:55:35
Post #5





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

Ostrzeżenie: (0%)
-----


ouu: jak? Jestem, przyznaje się, początkujący w c# pod apl. mobilne ;/ .. moze ja pokaze jak to wyglada teraz (tzn poza tym , ze zmienilem uklad plikow) to w taki sposob robilem calosc. http://scr.hu/6ip/1oz6t . w MainPage.xaml mam jakies menu glowne. i potem poprzez NavigationService.Navigate odsylam do poszczegolnych plikow.
Go to the top of the page
+Quote Post
batman
post 2.07.2012, 22:03:16
Post #6





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Stwórz katalog Models (na tym samym poziomie co np, files). W tym katalogu dodaj klasę (prawym myszy na utworzonym katalogu -> Add -> Class). W klasie tej stwórz metody wykonujące odpowiednie operacje i odwołaj się do tych metod w obsłudze zdarzeń. W pliku z code behind (c# dla widoku) dodaj
[CSHARP] pobierz, plaintext
  1. using dz.Models
[CSHARP] pobierz, plaintext
, a obsłudze zdarzenia utwórz obiekt modelu i wywołaj odpowiednią metodę. Jeśli zajdzie taka potrzeba, przekaż odpowiednie parametry. W sumie nie różni się to zbytnio od standardowego WPF, z tą różnicą, że wszystkie (zdecydowana większość) wbudowanych klas, działa asynchronicznie i trzeba bawić się w bindowanie pól ViewModelu.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
djbarca
post 2.07.2012, 22:26:55
Post #7





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

Ostrzeżenie: (0%)
-----


czyli generalnie chodzi o to, zeby w tym folderze Models byl plik z klasa ktora zawiera metody , zmienne itp.. a dopiero w konstruktrze/innych metodach moich "stron" aplikacji tworze obiekt i operuje na klasie z models? biggrin.gif
Go to the top of the page
+Quote Post
batman
post 2.07.2012, 22:40:07
Post #8





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Jak w PHP dominującym wzorcem jest MVC, tak na WP7 takim wzorcem jest MVVM: Model - View - ViewModel (nie wiem czy są jakieś inne możliwe do implementacji). W dużym skrócie polega on na tym, że Model (M) zasila ViewModel (VM) danymi, a VM bindowany jest do widoku (V). Dzięki temu wprowadzając zmiany w VM, widok wie, że musi się "odświeżyć".


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
djbarca
post 2.07.2012, 22:45:39
Post #9





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

Ostrzeżenie: (0%)
-----


Na jaki adres wysłac tą krate piwa? biggrin.gif dzięki wielkie. Postaram sie juz nie pytac (chociaz znajac życie to jeszcze na jakis problem napotkam) wink.gif


edit:

a jednak... wszystko działa tak jak powinno (tzn bez dziedziczenia) ale... no własnie. Mam zbindowaną listę .. w liście znajduje się przycisk który zawiera tag z identyfikatorem.
Teraz tak: wczytuje liste przedmiotów, klikam w przycisk , pobieram identyfikator, usuwam z listy dana wartosc, zapisuje liste (bo calosc jest na plikach xml) i przekierowuje.
Niby wszystko ładnie tyle ze zamiast jednej wartosci znika mi całość dodatkowo nie mogę ponownie dodać oceny.

Kod strony usuwającej: http://wklej.org/id/783397/
Kod strony dodającej: http://wklej.org/id/783398/
Kod klasy zarządzającej danymi: http://wklej.org/id/783399/

nie wiem czy najgorsze czy najlepsze w tym wszystkim jest to , ze usuwanie ocen działa w ten sposob tak jak powinno a usuwanie przedmiotow już nie. Zarówno oceny i przedmioty usuwane są po swoim identyfikatorze, identyfikator sie nie powtarza
czy coś jest od strony logicznej źle?

Ten post edytował djbarca 3.07.2012, 03:04:29
Go to the top of the page
+Quote Post
batman
post 3.07.2012, 06:22:04
Post #10





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Musiałbyś sprawdzić w metodach usuwających co zawierają listy. Bardzo możliwe, że zwraca Ci więcej danych niż powinno. Jeśli to będzie ok, to tam, gdzie przechwytujesz wyjątki podczas korzystania z Isolated Storage, wyświetl komunikaty błędów.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
djbarca
post 3.07.2012, 17:10:06
Post #11





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

Ostrzeżenie: (0%)
-----


ręce opadają... teraz zrobilem juz tak jak pisałeś. wszystko nawet ładnie . klikam w przedmiot , przedmiot jest usuwany ale jak klikam np menu głowne->przedmioty (zeby zobaczyc jak ta moja lista z przedmiotami wyglada) to co? nie ma nic ... a może to przez to ze ja 2x wykonuje odczyt z 2 roznych plikow w tym samym momencie. A potem np przy usuwaniu znowu wywoluje funkcje init ktora znowu wywoluje nowy model ktory w następstwie znowu wywoluje metody wczytujace pliki? nie wiem ..
czy otwierajac plik przy pomocy tego kodu mozna jakos zablokowac odcvzyt zeby drugi raz nie wczytalo go dopoki nie zapisze poprzedniego?

  1. using (IsolatedStorageFile myIsolatedStorage2 = IsolatedStorageFile.GetUserStoreForApplication())
  2. {
  3. using (IsolatedStorageFileStream stream2 = myIsolatedStorage2.OpenFile("przedmioty.xml", FileMode.OpenOrCreate))
  4. {
  5.  
  6. }
  7. }


wylapalem wyjatki i jest np tak(tyklo dla przedmiotow):
przy pierwszym wejsciu do programu - "There is an error in XML document (0,0)
po kliknieciu w usuniecie przedmiotu - "There is an error in XML document (1, 159)
i potem jak ponownie wchodze w liste przedmiotow jest taki sam blad jak po kliknieciu


zastanawia mnie jeszcze czy tak napisany kod jest poprawny?

tzn konstruktor wywoluje funkcje init ktora tworzy nowy obiekt modelu, binduje elementy a nastepnie po kliknieciu w przycisk usun:

  1. /*ref usun przedmiot*/
  2. private void button8_Click(object sender, RoutedEventArgs e)
  3. {
  4. Button btn = sender as Button;
  5. int zmienna = int.Parse(btn.Tag.ToString());
  6.  
  7. data.usunPrzedmiot(zmienna);
  8.  
  9. data.zapisPrzedmioty();
  10.  
  11. init();
  12.  
  13. NavigationService.Navigate(new Uri("/files/przedmiotyLista.xaml", UriKind.Relative));
  14. }


usunac z listy przedmiotow dany przedmiot, zapisac , wywolac funkcje init i przekierowac? czy to ma sens i przypadkiem czegos nie omija?

Ten post edytował djbarca 3.07.2012, 17:21:05
Go to the top of the page
+Quote Post
batman
post 4.07.2012, 07:32:50
Post #12





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Wydaje mi się, że źle podchodzisz do sprawy z zapisywaniem danych. Jeśli koniecznie musisz korzystać z XML, to wczytuj zawartość pliku do pamięci w metodach Application_Launching oraz Application_Activated, a aktualny stan zapisuj do pliku w metodach Application_Deactivated oraz Application_Closing. Metody te znajdziesz w App.xaml.cs. W ten sposób Twoja aplikacja przyspieszy, bo operacje na plikach są o wiele wolniejsze niż operacje na obiektach w pamięci.
Żeby uniknąć ciągłego wczytywania danych do kontrolek po dodaniu/usunięciu elementów z kolekcji, zastosuj interfejs INotifyPropertyChanged. W takim przypadku po zbindowaniu danych do kontrolki, każda wprowadzona w danych zmiana zostanie odwzorowana w widoku. Jeśli do bindowania dodasz parametr TwoWay, to zmiana w widoku (na zaznaczenie checkboxa) zostanie automatycznie zapisana. W przypadku kolekcji zastosuj typ ObservableCollection. Dzięki niemu lista będzie automatycznie się aktualizowała po wprowadzeniu zmian w kolekcji.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
djbarca
post 4.07.2012, 12:00:24
Post #13





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

Ostrzeżenie: (0%)
-----


nie wierzę! FileMode.Truncate :| działa.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2024 - 10:09