Oprettet søn. d. 30. september 2012 kl. 13:17:26

tjens
tjens (36.180 point. Point ude: 0)

WPF MVVM: Placering af opdateringskode

Jeg er i gang med at lære WPF og MVVM, og har lavet et program med
- Model object med data og properties,
- View, hvor alt initieres via Binding, så der ikke er nogen kode i .xaml.cs
- ViewModel, med ICommand og ObservableCollection af Model-objekter.

Nu er jeg imidlertid gået i stå, med hensyn til hvor jeg skal lægge koden til opdatering, når der sker ændring i et Model objekt.

Baggrunden for programmet er noget standardsoftware, hvor man kan definere nogen serverforbindelser i et konfigurationsprogram, og herefter starte et klientprogram, som giver adgang til alle disse servere.

Konfigurationsprogrammet er ret irriterende, da man kun kan oprette og slette serverforbindelser.
Jeg ønsker nu at skrive et tillægsprogram, som kan flytte forbindelserne mellem aktiver og arkiverede, så man ikke skal slette og oprette forfra, hvis man ikke ønsker at have så mange forbindelser samtidig.

Forbindelserne er defineret i Windows Regstry, så formålet med programmet er at flytte Subkeys med alle values fra standardplaceringen til en arkiv Subkey, som jeg selv har indført.

Skærmbilledet har to tekstfelter med normal registry path og arkiv registry path, en knap til indlæsning af alle eksisterende forbindelser fra de 2 paths, og et ListView, der viser alle forbindelsers oplysninger i GridViewColumns

Jeg har indført et bool felt i Modelobjektet til at angive om forbindelsen er aktiv eller arkiveret, som vises i en checkbox i første kolonne. Det virker fint med two-way binding, når fluebenet ændres direkte på GridView linien.

Og her går jeg i stå:
Jeg kunne kode opdateringen i bool-propertiens Set metode, men Model objektet til en forbindelse kender ikke de to registry paths fra ViewModel og View.
Jeg kunne også lægge noget kode i ViewModel, med der er ingen hændelse at aktivere koden med, da Binding ordner opdatering mellem View og Model.

Jeg synes, at brugerfladen er dejligt simpel, hvis jeg bare kunne udføre flytningen direkte når CheckBox ændres: Der er ingen Save knap eller Flyt til/fra arkiv knapper.

Er det fordi jeg blander æbler og pærer ved at have begge typer forbindelser i samme ObservableCollection med det ekstra bool-felt til indikation af typen, at jeg får dette problem?

Kan jeg på nogen måde (som ikke er brud på MVVM ideen) aktivere en metode i ViewModel, fra min bool property i Model?

Skrevet søn. d. 30. september 2012 kl. 19:55:06| #1

tjens
tjens (36.180 point)
Jeg fandt en løsning, hvor der kobles en metode ekstra på Model objektets PropertyChangedEventHandler:

Ny metode i ViewModel:

        public void ConnectionSubkeyPropertyChanged(object sender, PropertyChangedEventArgs e )
        {
            if ( e.PropertyName != "IsActive" || sender.GetType().Name != "ConnectionSubkey" ) {
                return;
            }

            bool? isActive = ( (ConnectionSubkey)sender ).IsActive;

            if ( isActive == null ) {
                return;
            }

            MoveConnectionSubkey( (ConnectionSubkey)sender );
        }


Tilføje metoden til den eksisterende event:

        newConnection.PropertyChanged += new  PropertyChangedEventHandler(ConnectionSubkeyPropertyChanged);

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   


Seneste spørgsmål

Mine float værdier mister '.' når jeg læser tal i dem

Oprettet den 23. maj 2013 kl. 22.56
CodingJoe giver 30 point for svar | Giv et svar »

Redigere appconfig settings fra web.config i runtime

Oprettet den 22. maj 2013 kl. 14.41
lasserasch giver 60 point for svar | Giv et svar »

Extension methods med constraint på interface

Oprettet den 18. maj 2013 kl. 19.26
CodingJoe giver 30 point for svar | Giv et svar »








Tips & Tricks fra PC World

Teaser billede

Fem smarte funktioner i din Mac som du sikkert ikke kender

Her har du fem muligheder for at tweake din Mac på en fed måde.


Anmeldelser fra PC World

Teaser billede

Test: Samsung Galaxy S4 er et hit - trods gøglertricks

Kan Samsung beholde førertrøjen i det store Android-race? Galaxy S4 er smækfyldt med innovative funktioner, men også med en del gøgl. Er det for meget? Få vores dom over Samsungs nye topmodel.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Ny opfindelse: Oplad din mobil på 20 sekunder

Måske er det snart slut med at lade mobilen op hver aften. Med ny opfindelse kan telefonen få fuld energi på sølle 20 sekunder.


Nyheder fra Computerworld

Teaser billede

Galleri: De 10 vildeste datacentre i verden

I en gammel kirke, i et oppusteligt telt, på nedlagte militæranlæg eller midt i ørkenen. Der er ingen grænser for, hvor man kan banke et datacenter op. Her er de 10 sejeste anlæg i verden. I...


IT Kurser
Samarbejdspartnere

Udgiver · © 2013 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger