Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [Visual Studio]Interfaccia grafica elaborata
Forum - C# / VB.NET - [Visual Studio]Interfaccia grafica elaborata - Pagina 5

Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 20:58
Venerdì, 24/05/2013
Ahh scusate, quanta confusione che faccio XD ok ok, allora facciamo ereditare la classe del model, perfetto cosi mi si semplificano le cose :-) grazie
Okkkk funziona alla perfezione
Codice sorgente - presumibilmente C++

  1. private bool Check;
  2.         public bool check
  3.         {
  4.             get
  5.             {
  6.                 return this.Check;
  7.             }
  8.             set
  9.             {
  10.                 this.Check = value;
  11.                 if (this.check == false && this.locked == true)
  12.                 {
  13.                     this.locked = false;
  14.                     this.RaisePropertyChanged(() => this.locked);
  15.                 }
  16.                 this.RaisePropertyChanged(() => this.check);
  17.             }
  18.         }
  19.         private bool Locked;
  20.         public bool locked
  21.         {
  22.             get
  23.             {
  24.                 return this.Locked;
  25.             }
  26.             set
  27.             {
  28.                 this.Locked = value;
  29.                 if (this.check == false && this.Locked == true)
  30.                 {
  31.                     this.check = true;
  32.                     this.RaisePropertyChanged(() => this.check);
  33.                 }
  34.                 this.RaisePropertyChanged(() => this.locked);
  35.             }
  36.         }


Ora si che ho capito :-) ho fatto giusto un paio di modifiche e corretto gli errori, ora mi porterò a lavorare sui viewmodel e spero di non trovare ulteriori difficoltà xD ma giusto un ultima (ho il presentimento che questa sia una bugia bella e buona) ma il metodo RaisePropertyChanged perche accetta il parametro in questo modo cosi particolare ()=>this.locked? non credo puntassero a creare un allegra emoticon o sbaglio?

PM Quote
Avatar
Dedalux (Member)
Pro


Messaggi: 103
Iscritto: 15/12/2010

Segnala al moderatore
Postato alle 23:59
Venerdì, 24/05/2013
Si potrebbe fare anche RaisePropertyChanged("NomeProprietà") usando una stringa, ma questa tecnica, che usa le cosiddette "magic strings", porta con se, insieme alla facile implementazione, il rischio di scrivere male il nome della proprietà, o di ritrovarsi con il codice che non funziona più dopo averlo cambiato.
Questa tecnica invece utilizza un'espressione lambda che contiene la proprietà vera e propria (nota che hai sbagliato e hai scritto "locked" con la minuscola, che è la variabile: non te lo segna errore ma non funzionerà).
Utilizzando la proprietà vera e propria, sei sicuro di scriverla giusta, e di esserti tutelato in caso di refactoring del nome.

Ultima modifica effettuata da Dedalux il 25/05/2013 alle 0:00
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 15:00
Sabato, 25/05/2013
Testo quotato

Postato originariamente da Dedalux:
(nota che hai sbagliato e hai scritto "locked" con la minuscola, che è la variabile: non te lo segna errore ma non funzionerà).

Scusa, ma dove? perche lo script mi funziona a meraviglia, e fa quello che prima non riuscivo assolutamente a fare XD

PM Quote
Avatar
Dedalux (Member)
Pro


Messaggi: 103
Iscritto: 15/12/2010

Segnala al moderatore
Postato alle 18:56
Domenica, 26/05/2013
A parte che non è uno script, ma è codice. Comunque nei RaisePropertyChanged che hai messo qua, nel tuo messagio, () => this.[proprietà], la proprietà l'hai messa con la minuscola, quindi accedi alla variabile e non alla proprietà vera e propria.
Poi se la proprietà (quella vera) l'hai messa in minuscolo, allora ok...

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 20:38
Domenica, 26/05/2013
Si scusa mementi del web. Comunque io seguo le regole di scrittura che impongono classi maiuscole, invece metodi e proprietà minuscole, per tanto mi ritrovo  ItemsSource="{Binding itemsMusic}" o IsChecked="{Binding check}"... e anche questi dubbi sembrano essersi diradati...
Grazie mille :) mi avete aiutato tantissimo
Ora sto leggendo un po dei command
Codice sorgente - presumibilmente C++

  1. public RelayCommand removePath
  2.         {
  3.             get { return new RelayCommand(removeButton_Click); }
  4.         }
  5.         private void removeButton_Click()
  6.         {
  7.             this.itemsPath.RemoveAt(this.selectedPath);
  8.             if(this.itemsPath.Count != 0) this.selectedPath = 0;
  9.             this.RaisePropertyChanged(() => this.selectedPath);
  10.             this.updatePath();
  11.         }


con i click non trovo problemi, ma veramente non capisco perche non  vi siano guide di facile accesso e complete...
Per esempio davanti ad un command cosi semplice non trovo problemi ma gia se cerco di bindare un evento particolare come il closing della window trovo diversi problemi, mi sapresti indirizzare?

PM Quote
Avatar
Dedalux (Member)
Pro


Messaggi: 103
Iscritto: 15/12/2010

Segnala al moderatore
Postato alle 22:40
Domenica, 26/05/2013
I commands stanno nel ViewModel. Quindi anche il metodo che scatenano deve risiedere li. Quindi se hai definito nel codebehind della View un button_click, non potrai usarlo nel ViewModel, perchè non si trova li.
Se invce ti trovi nel ViewModel, non andrei a chiamarlo in quel modo, perchè in fin dei conti è un metodo, e potrebbe essere chiamato da qualsiasi cosa, non solo da un button.

Riguardo l'ultima domanda:
Testo quotato

[...] se cerco di bindare un evento particolare come [...]


il Binding funziona solo con le proprietà (per questo sono nati i command, i metodi non sono bindabili).
Se hai una proprietà di tipo event, puoi bindarla ma devi avere un corrispettivo lato View che possa utilizzarla.
Se tu vuoi gestire l'evento close, non è il modo giusto di procedere.
Se quello che vuoi fare è abbinare ad un evento un command, si può fare. Cerca EventToCommand.

P.S. Non so che notazione stia utilizzando tu, ma da quel che so di solito si usa scrivere
NomeClasse
NomeProprietà
nomeVariabile
NOME_COSTANTE

invece ho visto che per proprietà e variabili fai il contrario

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 0:59
Lunedì, 27/05/2013
Cerco di far gestire un evento dal viewmodel, e credevo che il command fosse l'unico metodo, ne esistono di piu efficaci?
Io adopero una scrittura che mi porto dietro dal PHP, non tengo tanto a compararla con altri metodi di scrittura, in quanto la logica che sta dietro ad essa è la stessa che sta dietro uno pseudo-codice

PM Quote
Avatar
Dedalux (Member)
Pro


Messaggi: 103
Iscritto: 15/12/2010

Segnala al moderatore
Postato alle 21:39
Lunedì, 27/05/2013
Ok allora come ti ho detto devi bindare la proprietà evento del controllo, tipo il SelectionChanged di una ListView, ad un command.
Da' un'occhiata qui http://marlongrech.wordpress.com/2008/12/13/attachedcomman ...

Ultima modifica effettuata da Dedalux il 27/05/2013 alle 21:39
PM Quote
Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo