Bind to Object - Nytt item


Forum --> .NET

Author Comment
Pedro Dias
Bind to Object - Nytt item 13.04.2009 08:41:46
Jeg laget et skjema for vedlikehold av fjernkontroll koder. I ett og samme skjema har jeg en listbox som lister opp alle kjente koder, til høyre for denne ligger feltene:

txtDescription
txtCode
txtAscii
txtPostTransmitDelay

(Jeg kaller disse for "tekstfeltene" så slipper jeg å beskrive de mange ganger i dette innlegget)

For å databinde til dette (falt veldig for å kunne databinde objekter som er ferdig enhetstestet!) har jeg laget en klasse RemoteCommandLoader som bl.a. eksponerer en Colllection< RemoteCommand >, og et medlem CurrentItem. Denne administreres med CurrentIndex i samme objekt.

Datbinding er problemfritt, jeg binder listen til listview, og CurrentItem tekstfeltene. Når jeg nå klikker på ulike kommandoer på listen, så vises innholdet i hvert av feltene, og når jeg redigerer i tekstfeltene, så oppdateres teksten i listeboksen umiddelbart.

Men jeg får ikke til "Add":

1) Hvordan kan jeg, med en slik modell, få til å klikke på en knapp som lar meg "rense" tekstfeltene og la meg fylle inn en ny tekst der? (Er det slik at jeg MÅ legge til en ny RemoteCommand i listen og så oppdatere denne?)

Mitt CommandLoader objekt, samt alle involverte objekter implementerer INotifyPropertyChanged/Changing. Dialogen ser slik ut:

" http://www.digitaldias.com/workshop/forums/databind.jpg "

Det er IKKE et ønske å endre på dette skjermbildet.
Jeg vil helst implementere all presentasjonslogikk i CommandLoader, slik at jeg kun trenger å gjøre riktige databindinger, og unngår kode i GUI
Lars-Erik Aabech
RE:Bind to Object - Nytt item 20.05.2009 14:07:23
Hva med å la controlleren din (RemoteCommandLoader) abonnere på et event på viewet (formen) som du trigger ved klikk på en knapp. (button_Click(object sender, EventArgs e) { if (AddEvent != null) AddEvent(sender, e); }).

I controllerens handler (form_AddEvent) legger du til en tom RemoteCommand og setter CurrentItem til den.

Da har du all kode i controlleren, og databinder til den nye. Siden du har CurrentIndex burde det ikke være noe problem å lage en CancelEvent heller.

Håper dette hjelper deg, selv om jeg er en måned sent ute med svar. Smiley

L-E
Ole Morten Heien
RE:Bind to Object - Nytt item 20.05.2009 14:59:33
Hvis jeg har forstått deg riktig så har du altså en collection med objekter som har properties som igjen er bunnet til feltene.

Det vil jo si at felt innholdet til en hver tid representerer innholdet i objektet som igjen er "current" i listen.

For å få til en ADD må du som du sier, create et nytt element i collecitonen.
Noe slik i ADD knappens kode burde gjøre susen:


RemoteClass n = new RemoteClass( <eventuelle parametere du måtte ha i konstruktøren din> );
n.Description = 'New Command';
CommandList.Add(n);


Eventuellt. hvis du ikke ønsker å ha kode i FORMEN i det hele tatt så må du putte koden inn i en metode i objektet som holder selve listen, og kalle den metoden fra knappen, eventuellt melde inn eventet på knappen i liste objektet ditt. Ett sted må det jo gjøres.

NB! Navnene på klassene jeg har skrevet er tatt ut av det blå. PS! til SITE Admin. Kunne vært fint om vi så innledende meldinger samtidig som vi skriver svar....hmmm - kansje legge dette inn i SITE forumet.....

Ole

Copyright (C) 2006 Norwegian .NET User Group
  Powered by EPiServer