308 messaggi dal 08 gennaio 2011
Ciao Moreno,
ieri sono stato offline

Ho cercato di capire il codice della Classe NotifyPropertyChangeObject del tuo link a CodeProject ma ho trovato delle difficoltà. Mi ero messo a tradurre da C# a VB ma poi mi sono bloccato quando ho trovato le implementazioni dei seguenti metodi perchè non avendole capite non ho saputo trovare un codice corrispondente in VB.

Come si potrebbe ottenere l'equivalente vb di questi metodi ?

public void ApplyPropertyChange<T, F>(ref F field, Expression<Func<T, object>> property, F value)

public MemberExpression GetMemberExpression<T>(Expression<Func<T, object>> expression)


Ho anche notato che nei commenti all'articolo di Sandrino di Mattia, qualcuno (AmazingFactory) ritiene che il Binder WPF abbia profondi difetti e che la sua architettura sia ridicola.

Il fatto poi che l'articolo sia del 2009 da un lato mi fa sperare che oggi abbiamo un Binder WPF meno ridicolo, da un altro mi fa capire di quanto sono in ritardo e di quanto non sono aggiornato, dato che io sto affrontando oggi questioni che altri affrontavano 10 anni fa.

Insomma il mio entusiasmo di 'programmatore' si quasi disintegra.

Non lo so? Comincio a pensare seriamente che l'ecosistema Microsoft offerto per sviluppare applicazioni sia gravato da molte incoerenze, confusione e da una mentalità esageratamente orientata al commercio (Mentalità Americane); All'inizio, all'uscita del Framework .Net, per fare un esempio, per l'accesso ai dati veniva 'Pompato' l'uso dei DataSet che poi si sono rivelati un pò un casino (scusate la rozzezza), poi è arrivato EF altra cosa 'Pompata', che grazie al Cielo non ho mai usato ne mai userò proprio per la paura di perdere ulteriore tempo nell'apprendere un altro framework o metodologia. Invece, secondo me, il marketing o la comunicazione doveva semplicemente curare di più o Pompare l'aspetto culturale; sia DataSet sia EF alla fine utilizzano classi degli spazi dei nomi adibiti all'accesso dei dati. Queste dovevano essere messe in risalto, spiegate bene ecc. Invece no, ecco a voi i DataSet, che velocizzano, automatizzano, ma che poi alla lunga li devi evitare. Insomma, secondo il mio trascurabile punto di vista, il caos con il quale un programmatore deve combattere, dipende dal fatto che gli attori principali del mercato delle tecnologie informatiche siano gli Americani. Sono loro il problema.    Se ci fate caso, storicamente hanno sempre creato casini.

Devo pur dire tuttavia che io amo gli Americani, anche perchè hanno inventato la black music.

Scusami per lo sfogo Moreno; ritornando al problema, per quanto riguarda la perdita del focus ho deciso di implementare un metodo che sposta il focus sulla prima TextBox che non lo ha; pertanto nel gestore di closing in testa metto la chiamata al metodo
Private Sub ContattoW_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
        CacciaStoFocus()
        If DatiCambiati Then
            If MsgBox("Vuoi salvare le modifiche ?", MsgBoxStyle.DefaultButton2 Or MsgBoxStyle.YesNo, Me.Title) = vbYes Then
                C.Salva()
            Else
                C.AnnullaModifiche()
            End If
        End If
    End Sub


e nel metodo, dal nome un pò folkloristico, faccio questo che avrei voluto fare tramite LINQ ma.?
Private Sub CacciaStoFocus()
        For Each o As Object In MG.Children
            If Not o.IsFocused AndAlso o.GetType.ToString.Contains("TextBox") Then
                DirectCast(o, TextBox).Focus()
                Exit For
            End If
        Next
    End Sub


E' ovvio che la Window deve contenere almeno 2 TextBox.

Ciao, grazie ancora e scusatemi per le volgarità (eventuali)
135 messaggi dal 01 febbraio 2017
Condivido le 'rozzezze' ed aggiungo che con i nuovi paradigmi, perdi il 'controllo' del codice, perchè ti spuntano a volte errori ermetici di cui nn sai e nn puoi risalire, a meno che nn ci sei già passato e devi cercare aiuto e studiare ancora, e dopo qualche anno, che finalmente hai acquisto un minimo di padronanza, spunta fuori un'altra tecnologia (net core 3 ?) ...

Il problema è filosofico ( o religioso, dipende dai punti di vista) ... cioè la nececcità di astrarre la logica, dal codice, porta lo sviluippo ad un livello sempre più elevato, tanto che alla fine se ne perde il controllo, non solo dal lato UOMO (che è il lato a cui doveva essere affine), ma anche dal lato macchina, perchè appena passi in produzione un'applicazione ti genera tremila cartelle ed ottomila file, con i relativi file di configurazione di cui già solo uno (APP.CONFIG) ci vogliono mesi per capirne i paramtri e le chiavi utilizzabili ...
Senza contare che non sono bene documentati ... ed allora tutti qui ad 'elemosinare' un aiuto !
;-(

UNSTRING identifier-1 id-2 id-3
DELIMITED BY [ALL] OR [ALL] literal-1 lit-2
INTO {id-4 [DELIMITER IN id-5]
[COUNT IN id-6]}
[WITH POINTER id-7]
[TALLYING IN id-8]
[ON OVERFLOW imperative-statement-1]
[NOT ON OVERFLOW imper-2]
[END-UNSTRING]
308 messaggi dal 08 gennaio 2011
Ti ringrazi Gino per la soliderietà  .
Dovrebbe essere chiaro a tutti che il 'Caos' non è altro che il frutto, oserei dire, delle arroganze e delle avidità dei giganti. Microsoft la pensa così, Google cosà, Apple colì, Intel colà? Tutti giganti americani che hanno secondo me un esagerata ansietà per il successo, il dominio e il profitto. Non sono stati in grado ad esempio questi giganti di produrre uno schema di programmazione unificato, che salvasse da questa schizofrenia; e forse non l'hanno fatto sempre per vili ragioni economiche. Che gliene frega a loro; loro si fanno le loro piattaforme piene di 'segreti' montano smontano tanto c'è una marea di programmatori che contribuiscono alla diffusione e al successo ma anche al miglioramento di queste piattaforme pagando con il loro studio/lavoro fatto di giorni, mesi, anni di studio, di rinunce, perchè chiusi davanti ad una macchina, si rinuncia ad una vita più salubre, più all'aria aperta, per avere magari la soddisfazione di dirsi :'Ammazza quanto so bravo, sono diventato un guru.'
Ovviamente, per me, vanno tutta la stima, rispetto e ammirazione per tutti quei programmatori, anche americani  , che dotati di grande resilienza riescono sempre a dominare la schizofrenia a spuntarla e a raggiungere grandi livelli di competenza, però credo che si potrebbe avere un mondo più inclusivo/collaborativo per fare meglio ed evitare il più possibile inutili sacrifici.
Per onestà poi devo ammettere che magari uno come me, ragioniere diplomato col minimo dei voti +1, si, ho preso 37 all'esame di maturità, diplomato al 'prestigioso' ITCA Institute  (Istituto tecnico commerciale di Acri(CS)) è più propenso a lamentarsi proprio per le lacune di natura scolastica che ha. Però, c'è sempre un però, siccome ritengo di essere uno dotato di un intelligenza normale e di una grande passione per il computer e la rete, che ritengo siano gli strumenti migliori a disposizione per l'innalzamento culturale che l'umanità abbia mai avuto dopo il Vangelo, non posso impormi continui dolorosi/costosi aggiornamenti e rimanere tuttavia sempre nel dubbio.

Come farei io ?

Secondo me per sommi capi si dovrebbero definire due categorie principali di programmatori e un modello unificato di programmazione.

Le due categorie sarebbero costituite da: i PBL (Programmatori del baso livello) e i PAL (Programmatori dell'alto livello). I PBL si occuperebbero dell'hardware dei compilatori e dei linguaggi; i PAL si occuperebbero di produrre script o app che dir si voglia, sulla base del MUP (Modello unificato di programmazione) che non sarebbe altro che un'API a bassissima frequenza di aggiornamento e adatta allo sviluppo su qualsiasi dispositivo. Gli aggiornamenti sarebbero a carico dei PBL.

In cuor mio credo che la produzione di Software di consumo possa essere semplificata ulteriormente in modo da migliorare sia la qualità del software sia di includere più persone possibili nel processo di produzione.

Oggi purtroppo assistiamo ad uno scenario dove pochissime ditte (americane), magari in guerra tra di esse, acchiappano tuto il 'miele' del mercato - ero tentato di dire tutto il miele delle API  -, sfruttando anche il lavoro mai pagato di milioni di fans.

Io comincio ad essere diffidente.

Speriamo comunque che venga posto un rimedio, poi non dimentichiamo che in realtà siamo ancora agli inizi, cosa vuoi che siano alcuni decenni di informatica di massa, ancora siamo nell'era della confusione euforica.

Ciao, grazie per avermi dato la possibilità di dire la mia.
11.886 messaggi dal 09 febbraio 2002
Contributi
L'implementazione di Sandrino serve a dimostrare come realizzare un change tracker. Certo, anche io penso che sia migliorabile per il fatto che la stessa logica vada ripetuta in ogni proprietà. Però, pazienza, puoi migliorarla tu stesso, oppure usare qualcos'altro. Ecco un pacchetto NuGet che fa la stessa cosa con classi POCO.
https://www.nuget.org/packages/ChangeTracking/

...che è qualcosa di simile ai proxy di Entity Framework. A proposito: io in base alla necessità uso sia ADO.NET che Entity Framework e mi sembrano entrambi strumenti utili.


qualcuno (AmazingFactory)

Ma perché dai retta all'opinione di un tizio anonimo. Formati la tua opinione. Però prima fai anche in modo di aver padroneggiato lo strumento, altrimenti ricadi nella situazione della volpe e l'uva.

ciao,
Moreno
Modificato da BrightSoul il 05 ottobre 2019 12:53 -

Enjoy learning and just keep making
308 messaggi dal 08 gennaio 2011
Ciao Moreno,
un change traker sarebbe un oggetto che controlla e segnala se ci sono stati cambiamenti nelle proprietà di un altro oggetto ?

E se viene utilizzato un change traker significa che è sconsigliabile implementare INotifyPropertyChange e perchè ?

Oppure certe volte è meglio utilizzare una cosa invece di un'altra ?

Mi puoi indicare qualche risorsa dove si può capire quando usare un approccio rispetto a un altro ?

Scusami ma sono nel caos più totale...
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Mario,
tracciare i cambiamenti in un oggetto è una funzionalità che puoi usare per sapere se l'utente ha cambiato o no i valori dell'oggetto. In questo modo puoi decidere se è il caso (o no) di mostrare l'avviso "Vuoi salvare i dati?".

INotifyPropertyChanged non c'entra con questo. Va comunque usato perché la sua responsabilità è diversa: è quella di permettere alla UI di reagire automaticamente ai cambiamenti del modello, grazie al meccanismo del binding.

Quando ho tempo preparo un esempio.

ciao,
Moreno

Enjoy learning and just keep making
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Mario,
questo è un esempio (abbastanza crudo) su come usare il change tracker. Con questo link puoi scaricare un progetto.
https://1drv.ms/u/s!Ao4rhSdtDw8rgfMCJSPbqxWWh9TyqA?e=uG2aUQ

Ci sono due view di esempio: visualizzazione e modifica. Ciascuna ha il proprio viewmodel (PersonListViewModel e PersonEditModel).
Ho cercato di rendere il modello per la modifica il più semplice possibile, in modo che sia semplice aggiungere nuove entità da modificare. Ecco infatti come è fatto il PersonEditModel.

    public class PersonEditModel : BaseEditModel
    {
        public virtual Guid Id { get; set; }
        public virtual string FirstName { get; set; }
        public virtual string LastName { get; set; }
    }


Tutta la logica di notifica alla UI, del change tracking, e della conferma o annullamento delle modifiche è incapsulata dentro BaseEditModel.

Grazie al change tracking, è possibile sapere se l'entità sta subendo modifiche e perciò abilitare/disabilitare i bottoni Salva e Annulla, e far apparire un messaggio se l'utente prova a chiudere la finestra con modifiche non salvate.

Al salvataggio, la view di elenco viene notificata e perciò rifletterà le modifiche apportate.

ciao,
Moreno
Modificato da BrightSoul il 13 ottobre 2019 23:41 -

Enjoy learning and just keep making
308 messaggi dal 08 gennaio 2011
Che Dio ti benedica Moreno, Grazie.
In questo tempo intanto ho capito che per WPF è stato creato questo pattern MVVM che sto studiando e che mi sembra di capire dal tuo post che anche nel tuo progetto di esempio è usato.
Adesso scarico il tuo progetto e vedo di capire meglio.

Ciao.
Modificato da Mario Formosa il 14 ottobre 2019 08:21 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.