text:
ciao -LV,
[cut]
> Comunque ci devo pensare meglio: piuttosto l'avevo buttata li' per
> sentire se a chi si occupa piu' professionalmente di me di sicurezza
> faceva suonare qualche campanello. In ogni caso temo sarebbe un tema
> da approfondire in altra sede.
sono daccordo con te circa l'affermazione "fare tutto alla luce del
sole" ...per le sole tecniche di encryption mediante crittografia a
chiave asimmetrica (rsa, ect.).
Se invece ti interessa approfondire qualche tecnica di protezione del
codice .NET che, comunque, non è proprio in sintonia con
*leggibilità* :-) ...perchè si cerca di generare "codice
polimorfico"...puoi seguire qualche mio post. ho iniziato l'argomento
qui:
http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=55
Marcello Cantelmo
www.cantelmosoftware.com


title: L'alternativa open-source a .NET Reflector

author: LudovicoVan

text:
On Feb 22, 3:20 pm, Marcello Cantelmo <
i...@cantelmosoftware.com
>
wrote:
> ciao -LV,
>
> [cut]
>
> > Comunque ci devo pensare meglio: piuttosto l'avevo buttata li' per
> > sentire se a chi si occupa piu' professionalmente di me di sicurezza
> > faceva suonare qualche campanello. In ogni caso temo sarebbe un tema
> > da approfondire in altra sede.
Ciao Marcello, grazie per il feedback. Faccio qualche commento:
> sono daccordo con te circa l'affermazione "fare tutto alla luce del
> sole" ...per le sole tecniche di encryption mediante crittografia a
> chiave asimmetrica (rsa, ect.).
Mi riferivo a qualcosa di piu' radicale: piuttosto che offuscare/
criptare, rendo il codice open e pubblico al livello "mondiale", di
modo che un eventuale plagio, che produce un danno economico solo se
comincia ad avere una base di utenza rilevante, e che per lo stesso
motivo passa difficilmente inosservato, e' altrettanto facile da
smascherare in quanto tale. (E allo stesso tempo aiuto piccole
realta', dove il plagio comunque non mi danneggia.)
Dato lo stato attuale degli atteggiamenti giuridici rispetto alla
brevettabilita' del software (capitolo dolentissimo ovviamente), e'
una strategia con i suoi limiti, soprattutto nel caso di concorrenza
in mercati di nicchia (intendendo, con pochi produttori in forte
concorrenza, dove lo spionaggio industriale ha un forte impatto), ma
in generale mi sembrerebbe una strategia per lo meno interessante,
considerato che piu' comunemente la differenza di competitivita' non
la fa il prodotto bensi' il livello dei servizi consulenziali e
tecnici a contorno, nonche' e forse ancora di piu' la reputazione
dell'azienda stessa.
Make sense? :)
> Se invece ti interessa approfondire qualche tecnica di protezione del
> codice .NET che, comunque, non è proprio in sintonia con
> *leggibilità* :-) ...perchè si cerca di generare "codice
> polimorfico"...puoi seguire qualche mio post. ho iniziato l'argomento
> qui:
http://www.cantelmosoftware.com/dblog/articolo.asp?articolo=55
Ho letto il tuo post. Prima di tutto vediamo se ho capito bene: la
trasformazione da 'Dim a As Int32 = -1' a 'Dim a As Int32 = 123 Or -1'
la farebbe l'obfuscator, non saremmo noi a scrivere quel codice,
giusto? (Scusa la domanda sicuramente banale, e' per esserne sicuro.)
Se ho capito bene, a parte che si avrebbe una perdita di efficienza
(ma forse questa e' una castronata nel caso il codice venga poi
ottimizzato dal compilatore JIT: ma qui semplicemente non so),
l'approccio che mostri mi sembra che sia facilmente aggirabile da un
decompilatore che sia in grado di applicare quelle stesse
ottimizzazioni sulle operazioni risolvibili a compile-time (direi,
tutte le operazioni deterministiche con operandi costanti) di solito
applicate, appunto, da un compilatore...
Ne approfitto invece per chiedere, da newbie naturalmente, di un altro
possibile approccio all'obfuscation: non basterebbe un Lint-ing su
tutti i *nomi* (per esempio, la variabile CostoProdotto diventa
'a127', la functione CalcolaCostoTotale diventa 'a128', ecc. ecc.) per
rendere qualunque programma non banale *quasi-completamente*
illeggibile?
-LV


author: Giulio Petrucci

text:
Ciao Ludovico,
On 2/22/2011 9:29 PM, LudovicoVan wrote:
> Mi riferivo a qualcosa di piu' radicale: piuttosto che offuscare/
> criptare, rendo il codice open e pubblico al livello "mondiale",
[cut]
+1.
Di sicuro è il modo migliore per *bloccare* il plagio.
> Ne approfitto invece per chiedere, da newbie naturalmente, di un altro
> possibile approccio all'obfuscation: non basterebbe un Lint-ing su
> tutti i *nomi* (per esempio, la variabile CostoProdotto diventa
> 'a127', la functione CalcolaCostoTotale diventa 'a128', ecc. ecc.) per
> rendere qualunque programma non banale *quasi-completamente*
> illeggibile?
IMHO se aumenti il costo di "decifrabilità" del SW oltre il costo
dell'acquisto, hai già raggiunto il tuo obiettivo. :-)
ciao,
Giulio
--


author: Marcello Cantelmo

text:
ciao LV,
> Mi riferivo a qualcosa di piu' radicale: piuttosto che offuscare/
> criptare, rendo il codice open e pubblico al livello "mondiale", di
> modo che un eventuale plagio, che produce un danno economico solo se
> comincia ad avere una base di utenza rilevante, e che per lo stesso
> motivo passa difficilmente inosservato, e' altrettanto facile da
> smascherare in quanto tale. (E allo stesso tempo aiuto piccole
> realta', dove il plagio comunque non mi danneggia.)
imho...un "piccolo" (intesa sempre come azienda) non può permettersi
questa strada...altrimenti "chiude bottega"
> Dato lo stato attuale degli atteggiamenti giuridici rispetto alla
> brevettabilita' del software (capitolo dolentissimo ovviamente), e'
> una strategia con i suoi limiti, soprattutto nel caso di concorrenza
> in mercati di nicchia (intendendo, con pochi produttori in forte
> concorrenza, dove lo spionaggio industriale ha un forte impatto), ma
> in generale mi sembrerebbe una strategia per lo meno interessante,
> considerato che piu' comunemente la differenza di competitivita' non
> la fa il prodotto bensi' il livello dei servizi consulenziali e
> tecnici a contorno, nonche' e forse ancora di piu' la reputazione
> dell'azienda stessa.
>
> Make sense? :)
...punti di vista! :-)
> Ho letto il tuo post. Prima di tutto vediamo se ho capito bene: la
> trasformazione da 'Dim a As Int32 = -1' a 'Dim a As Int32 = 123 Or -1'
> la farebbe l'obfuscator, non saremmo noi a scrivere quel codice,
> giusto? (Scusa la domanda sicuramente banale, e' per esserne sicuro.)
yes! ...analisi dei costrutti e modifica automatica da parte
dell'obfuscator
> Se ho capito bene, a parte che si avrebbe una perdita di efficienza
> (ma forse questa e' una castronata nel caso il codice venga poi
> ottimizzato dal compilatore JIT: ma qui semplicemente non so),
...in queste situazioni la perdita è zero!
> l'approccio che mostri mi sembra che sia facilmente aggirabile da un
> decompilatore che sia in grado di applicare quelle stesse
> ottimizzazioni sulle operazioni risolvibili a compile-time (direi,
> tutte le operazioni deterministiche con operandi costanti) di solito
> applicate, appunto, da un compilatore...
- deve "sapere" tutte le tecniche usate...e prevedere le N
varianti! ;-)
- visto che è tutto stack-based...si inseriscono operazioni
supplementari e rendi dura l'analisi
il decompilatore può fare solo "un'analisi statica" del codice...e non
può sapere se:
= 123 Or -1 = -1
oppure, per qualsiasi valore x > 0:
(x * x) > 0 (predicato opaco)
> Ne approfitto invece per chiedere, da newbie naturalmente, di un altro
> possibile approccio all'obfuscation: non basterebbe un Lint-ing su
> tutti i *nomi* (per esempio, la variabile CostoProdotto diventa
> 'a127', la functione CalcolaCostoTotale diventa 'a128', ecc. ecc.) per
> rendere qualunque programma non banale *quasi-completamente*
> illeggibile?
il solo renaming *non* serve a niente!
per chi non conosce il tuo codice...un metodo, field, ect. che si
chiami CostoProdotto o altro nome non ha importanza. rende "unica"
quell'informazione (nome) e cerca di ricostruire il codice
l'importante è tutelare il contenuto! ;-)
come sempre, imho! :-)
> -LV
ciao,
Marcello Cantelmo


text:
> Ne approfitto invece per chiedere, da newbie naturalmente, di un altro
> possibile approccio all'obfuscation: non basterebbe un Lint-ing su
> tutti i *nomi* (per esempio, la variabile CostoProdotto diventa
> 'a127', la functione CalcolaCostoTotale diventa 'a128', ecc. ecc.) per
> rendere qualunque programma non banale *quasi-completamente*
> illeggibile?
valuta tu stesso alcuni schemi:
http://www.cantelmosoftware.com/download/g5.pdf
Marcello Cantelmo


text:
On Feb 25, 8:49 am, Marcello Cantelmo <
i...@cantelmosoftware.com
>
wrote:
> > Se ho capito bene, a parte che si avrebbe una perdita di efficienza
> > (ma forse questa e' una castronata nel caso il codice venga poi
> > ottimizzato dal compilatore JIT: ma qui semplicemente non so),
>
> ...in queste situazioni la perdita è zero!
Ricollegandomi al tuo esempio:
http://www.cantelmosoftware.com/download/g5.pdf
Confrontando il metodo decompilato non offuscato (pag. 2) con il
decompilato finale con varie tecniche di offuscamento applicate (pag.
7), ad occhio mi sembra che ci dovrebbe essere una *significativa*
perdita di efficienza, significativa ovviamente se calcolata su tutto
l'assembly. Cosa mi sfugge? (Ovvero, perche' dici che la perdita e'
zero? Anche piu' sotto menzioni l'inserimento di operazioni
supplementari...)
> > l'approccio che mostri mi sembra che sia facilmente aggirabile da un
> > decompilatore che sia in grado di applicare quelle stesse
> > ottimizzazioni sulle operazioni risolvibili a compile-time (direi,
> > tutte le operazioni deterministiche con operandi costanti) di solito
> > applicate, appunto, da un compilatore...
>
> - deve "sapere" tutte le tecniche usate...e prevedere le N
> varianti! ;-)
> - visto che è tutto stack-based...si inseriscono operazioni
> supplementari e rendi dura l'analisi
>
> il decompilatore può fare solo "un'analisi statica" del codice...e non
> può sapere se:
>
> = 123 Or -1 = -1
Ma quella operazione *e'* staticamente risolvibile, ed e' infatti una
di quelle semplificazioni che il compilatore applica a meno che nelle
opzioni di progetto non disabiliti appunto le ottimizzazioni. (Sto
dicendo una castronata?)
> oppure, per qualsiasi valore x > 0:
>
> (x * x) > 0 (predicato opaco)
>
> > Ne approfitto invece per chiedere, da newbie naturalmente, di un altro
> > possibile approccio all'obfuscation: non basterebbe un Lint-ing su
> > tutti i *nomi* (per esempio, la variabile CostoProdotto diventa
> > 'a127', la functione CalcolaCostoTotale diventa 'a128', ecc. ecc.) per
> > rendere qualunque programma non banale *quasi-completamente*
> > illeggibile?
>
> il solo renaming *non* serve a niente!
>
> per chi non conosce il tuo codice...un metodo, field, ect. che si
> chiami CostoProdotto o altro nome non ha importanza. rende "unica"
> quell'informazione (nome) e cerca di ricostruire il codice
Unica non basta a capirne la *semantica*: e, considerato che la
semantica al 90% dipende appunto dal naming, il costo di reverse-
engineering diventa proibitivo... Comunque questo era il pensiero che
esprimevo, ma non insisto perche' non sono certo un esperto in
materia!
> l'importante è tutelare il contenuto! ;-)
>
> come sempre, imho! :-)
Yep, siamo qui per imparare. :)
-LV


text:
> Confrontando il metodo decompilato non offuscato (pag. 2) con il
> decompilato finale con varie tecniche di offuscamento applicate (pag.
> 7), ad occhio mi sembra che ci dovrebbe essere una *significativa*
> perdita di efficienza, significativa ovviamente se calcolata su tutto
> l'assembly. Cosa mi sfugge? (Ovvero, perche' dici che la perdita e'
> zero? Anche piu' sotto menzioni l'inserimento di operazioni
> supplementari...)
ti ho linkato il pdf per far notare le differenze tra il "solo
renaming" (tuo riferimento al cambio nome a127, a128, ect.) ed altre
eventuali tecniche (a pag. 3 c'è solo renaming). "renaming !=
obfuscation"
a dire il vero, nell'esempio, manca pure la procedura di camuffamento
dei valori numerici (come scrivo nell'ultima pag). infatti nella riga
Dim a7 As A = a.b(a.A(a.a(DirectCast(a.a(a5), ArrayList)), 1))
riesci a vedere il valore "1"  :-)   ...era un esempio già pronto
creato per mettere in risalto il camuffamento delle operazioni
matemetiche ;-)
n.b.: si ha un leggero calo di performance solo con l'alterazione del
controlflow (dipende sempre da cosa e come si modifica). "sicurezza !=
velocità"
> > = 123 Or -1 = -1
>
> Ma quella operazione *e'* staticamente risolvibile, ed e' infatti una
> di quelle semplificazioni che il compilatore applica a meno che nelle
> opzioni di progetto non disabiliti appunto le ottimizzazioni. (Sto
> dicendo una castronata?)
tu scrivi sempre "-1"...l'obfuscator ottiene il valore per altre vie.
a runtime non cambia nulla...ma l'analisi statica diventa difficoltosa
e serve un debugger!
esempio: se non interessa l'intera applicazione ma si vuole realizzare
solo un cr4ck e/o k3yg3n si dovrà cercare di "invertire" un algoritmo/
procedura. per invertire si deve leggere, capire e ricostruire...
se c'è solo il "renaming" si esegue un copia-incolla del codice e si
studia l'algoritmo di protezione senza alcun problema
c'è da capire da chi ci vogliamo difendere...e sfruttare le varie
tecniche di protezione
> Unica non basta a capirne la *semantica*: e, considerato che la
> semantica al 90% dipende appunto dal naming, il costo di reverse-
> engineering diventa proibitivo... Comunque questo era il pensiero che
> esprimevo, ma non insisto perche' non sono certo un esperto in
> materia!
...è solo un interessante scambio di idee ;-)
> Yep, siamo qui per imparare. :)
+1
Marcello Cantelmo
www.cantelmosoftware.com


title: gestione delle eccezioni

author: GennarinOSpion

text:
Ciao,

qual'e' il modo più corretto per gestire eccezioni all'interno di una
classe?

se all'interno della classe ho un metodo del tipo:

        public void FaiQualcosa()
         {

             int a = Convert.ToInt32("aaa");

         }

Convert ad esempio potrebbe sollevare un'eccezione, in tal caso come la
comunico alla classe chiamante?

grazie


title: gestione delle eccezioni

text:
"GennarinOSpion" <
Gennari...@n.it
> wrote in message
news:j86u5u$lic$1...@speranza.aioe.org...

> Convert ad esempio potrebbe sollevare un'eccezione, in tal caso come la
> comunico alla classe chiamante?

Come regola di massima: meno uno fa meglio e'...  Ovvero, se non ha senso
gestire l'eccezione nel metodo in questione, semplicemente non la si
gestisce e si lascia che l'eccezione si propaghi ai layer superiori, nei
quali di nuovo una valutazione del genere andra' fatta, e cosi' via fino al
livello piu' alto, quello globale.  In produzione si implementa sempre un
gestore di eccezioni globale, per lo meno per fare del logging e restituire
un feedback user-friendly.

Per discorsi piu' approfonditi su questo tema, ti consiglio una ricerca in
rete, troverai parecchio:
http://www.google.co.uk/search?q=.Net+exception+handling+best+practices

Un thread interessante e' qui:
http://codebetter.com/karlseguin/2006/04/05/understanding-and-using-exceptions/

HTH,

-LV


title: gestione delle eccezioni

text:

thx ! :)


title: Errore distribuzione applicazione

author: Andrea [Work]

text:
Ciao a tutti,
sto scrivendo un progetto pocketPC (Vb2008). Ho spostato una classe da
interna ad una class library, e ho referenziato quella DLL.
E' una classe "banale" che non referenzia niente.

Da quando ho fatto lo spostamento, sull'emulatore vb tenta di distribuire
anche i vari
System.XML
System.Data
ecc.
Fino a riempire la memoria dell'emulatore dando errore 0x8973190e

Un errore tipo questo:
http://social.msdn.microsoft.com/Forums/en-US/vssmartdevicesnative/thread/15efac2e-bc9b-4af8-8c25-55fc42fb81ab/

Ma forse ho sbagliato e non mi funziona.

Su palmare fisico non copia niente invece.

Qualche consiglio?
Grazie


title: Errore distribuzione applicazione

text:
"Andrea [Work]"  wrote in message
news:1dk9itlnqfpwz$.s6a7ezm79z41$.dlg@40tude.net...

> Su palmare fisico non copia niente invece.

Just a blind guess, visto che non ho mai sviluppato per pocketPC: hai
controllato il target framework nelle opzioni di compilazione del progetto?
Il fatto che quegli assembly non vengono copiati sul tuo palmare puo' essere
dovuto al fatto che sono gia' installati nella GAC.

-LV


title: Errore distribuzione applicazione

text:
Il Tue, 18 Oct 2011 16:16:12 +0100, LudovicoVan ha scritto:

>> Su palmare fisico non copia niente invece.
>
> Just a blind guess, visto che non ho mai sviluppato per pocketPC: hai
> controllato il target framework nelle opzioni di compilazione del progetto?
> Il fatto che quegli assembly non vengono copiati sul tuo palmare puo' essere
> dovuto al fatto che sono gia' installati nella GAC.

Allora diciamo che emulatore e palmare funzionavano perfettamente con
quell'applicazione (fwk 3.5).
Appena ho spostato una classe (scritta da me e di linguaggio base senza
riferimenti), in una DLL in un progetto nuovo, e ho referenziato questa al
posto della classe interna (che ho eliminato), si mette a distribuire tutta
quella roba.

Mi sembra di aver letto un 2.0.0.0 ma il fwk è sempre 3.5 per entrambi i
progetti.


title: Errore distribuzione applicazione

text:
Il Wed, 19 Oct 2011 16:09:32 +0200, Andrea [Work] ha scritto:

> Allora diciamo che emulatore e palmare funzionavano perfettamente con
> quell'applicazione (fwk 3.5).
> Appena ho spostato una classe (scritta da me e di linguaggio base senza
> riferimenti), in una DLL in un progetto nuovo, e ho referenziato questa al
> posto della classe interna (che ho eliminato), si mette a distribuire tutta
> quella roba.
>
> Mi sembra di aver letto un 2.0.0.0 ma il fwk è sempre 3.5 per entrambi i
> progetti.

Allora ho risolto.
Avevo creato per errore una class library di tipo "windows" e non compact
framework.
Ho creto un progetto "class library compact" e vi ho spostato le classi, ho
ricompilato e ho referenziato questa dll nel progetto compact che la
utilizzava, adesso distribuisce solo quella DLL e non da più errore.

La class library è versione 2.0 mentre i progetti sono 3.5 e non ci sono
problemi ovviamente.


title: Errore distribuzione applicazione

text:
"Andrea [Work]" <andrea.isw...@gmail.invalid> wrote in message
news:1a90xkx9cbo6y.5...@40tude.net...

> Avevo creato per errore una class library di tipo "windows" e non compact
> framework.

Era cio' a cui mi riferivo: il target framework.

-LV


title: Errore distribuzione applicazione

text:
Il Wed, 26 Oct 2011 20:03:32 +0100, LudovicoVan ha scritto:

>> Avevo creato per errore una class library di tipo "windows" e non compact
>> framework.
>
> Era cio' a cui mi riferivo: il target framework.

Il punto č che essendo la prima volta, se andavo su progetto smart device
non mi faceva vedere l'opzione Class Library, quindi per niubbiaggine ne ho
creata una standard, immaginando che se si rimaneva in delle istruzioni
comuni non ci fossero problemi, e che se c'era qualcosa me lo diceva subito
in fase di riferimento.


title: Errore distribuzione applicazione

text:
"Andrea [Work]"  wrote in message
news:2pkwbnyaoxfe$.m2ei7za38019$.dlg@40tude.net...
> Il Wed, 26 Oct 2011 20:03:32 +0100, LudovicoVan ha scritto:
>
> >> Avevo creato per errore una class library di tipo "windows" e non
> >> compact
> >> framework.
> >
> > Era cio' a cui mi riferivo: il target framework.
>
> Il punto è che essendo la prima volta, se andavo su progetto smart device
> non mi faceva vedere l'opzione Class Library, quindi per niubbiaggine ne
> ho
> creata una standard, immaginando che se si rimaneva in delle istruzioni
> comuni non ci fossero problemi, e che se c'era qualcosa me lo diceva
> subito
> in fase di riferimento.

Il fatto e' che ti stai affidando ai template di progetto (che di solito
ovviamente e' l'approccio preferibile), ma tieni conto che puoi sempre
specificare a mano tutte le impostazioni necessarie, in particolare puoi
cambiare il target framework dalle opzioni avanzate di compilazione.

-LV


title: Errore distribuzione applicazione

text:
Il Thu, 3 Nov 2011 10:44:23 -0000, LudovicoVan ha scritto:

> Il fatto e' che ti stai affidando ai template di progetto (che di solito
> ovviamente e' l'approccio preferibile), ma tieni conto che puoi sempre
> specificare a mano tutte le impostazioni necessarie, in particolare puoi
> cambiare il target framework dalle opzioni avanzate di compilazione.

Da lě avevo provato, ma non mi pare si potesse cambiare da normale a
compact framework, ma solo da 2,3, 3.5 ecc.


title: Errore distribuzione applicazione

text:
"Andrea [Work]"  wrote in message
news:15f2lnzxrbbuh.37mbkyk3y503$.dlg@40tude.net...

Guarda meglio: c'e' la lista di tutti i framework istallati ed anche
l'opzione "Install other frameworks..."

-LV


title: [WPF] TreeView "vecchio stile"

author: marcosabba

text:
Salve,
qualcuno conosce qualche risorsa online o ha qualche suggerimento per
ottenere in wpf su qualsiasi sistema windows il template "old style" del
treeview, quello con l'expandbutton con il - e + e con le linee di
collegamento tra i nodi che indicano i livelli gerarchici?
Grazie e ciao a tutti


title: [WPF] TreeView "vecchio stile"

text:

per ora sto seguendo questo:
http://social.msdn.microsoft.com/forums/en-US/wpf/thread/30cb182c-9419-40bd-946e-87971515fb95/
"sapevatelo" :)


title: Serializzazione di una classe

text:
Ciao a tutti,
devo salvare delle proprietà di una classe in un campo BLOB di un database,
e poi rileggerle per risettarle sulla classe.

Non ho mai usato la serializzazione, mi date qualche dritta per cominciare?
Devo usare XMLSerializer?
Ho visto che c'è anche l'interfaccia ISerializable ma non ho ben capito
come usarla.

XPost: it.comp.dotnet, it.comp.lang.visual-basic
FwUp:  it.comp.lang.visual-basic


title: [WCF][VS] Come si testa un servizio?

text:
Ciao a tutti,
sono ai primissimi step con WCF e sono munito di una Visual Web Dev
Express. Ho creato un servizio wcf seguendo riga per riga questo tutorial:
http://blah.winsmarts.com/2008-4-Writing_the_WCF_Hello_World_App.aspx
Ad un certo punto c'è scritto:
To host it and test it right inside of Visual Studio, just hit F5 (and
this is why we need the App.Config, the cassini server uses that config
file to expose the appropriate endpoints).
Se io premo F5 si apre una pagina di Chrome con il directory listing del
mi progetto. :-(
Cosa sbaglio?
:-)
Grazie,
Giulio
--


title: c# db sql compact 3.5

author: Jasmine

text:
ciao, rigiro una domanda di un amico

qualcuno di voi sa come popolare un db sql compact 3.5?

ho i dati (stanno su un csv) ma non so come infilarli dentro :|

al momento sto scrivendo un programmino-ino-ino in c# per scrivere, ma
sono in alto mare :|

Non esiste un ng specifico per c# nella gerarchia it ....
grazie, ciao, Jasmine
--

camminatore che vai cercando la pace al crepuscolo
la troverai' alla fine della strada (Battiato)


title: c# db sql compact 3.5

author: Raffaele Rialdi [MVP]

text:
Jasmine wrote:
> ciao, rigiro una domanda di un amico
>
>
> qualcuno di voi sa come popolare un db sql compact 3.5?
>
> ho i dati (stanno su un csv) ma non so come infilarli dentro :|
>
> al momento sto scrivendo un programmino-ino-ino in c# per scrivere, ma
> sono in alto mare :|
>
>
> Non esiste un ng specifico per c# nella gerarchia it ....
> grazie, ciao, Jasmine

Esiste un'estensione "Sql Server compact toolbox" che puoi installare a
partire dal menu tools - extension manager.

Tra le varie cose supporta l'import di csv dentro sql compact.

--
Raffaele Rialdi
http://www.iamraf.net

Weblog:
http://blogs.ugidotnet.org/raffaele

Microsoft MVP profile
https://mvp.support.microsoft.com/profile/raffaele

UGIdotNET -
http://www.ugidotnet.org/


title: c# db sql compact 3.5

text:
 il Thu, 09 Feb 2012 18:58:15 +0100, Raffaele Rialdi [MVP]

>Esiste un'estensione "Sql Server compact toolbox" che puoi installare a
>partire dal menu tools - extension manager.
>
>Tra le varie cose supporta l'import di csv dentro sql compact.

grazie! passo la risposta...



title: C# mistero della fede

author: MasterControl

text:
Salve
qualcuno mi illumini...
Creo un progetto e tento di connettermi a Mysql in locale tramite
connector, senza successi....
poi sempre da visual studio 2010 express, creo un nuovo progetto con una
form e ad un pulsante lascio gestire il codice per connettermi a Mysql
in locale, tramite apposito connector.
E tutto procede bene
Tutto funziona correttamente....
Domanda:-
se il pc è il medesimo, l'ambiente pure, il server pure, il codice pure....
perchè dal nuovo progetto tutto fila liscio, e dal primo progetto pur
ritentando molte volte(eliminando i riferimenti al connector,
riscrivendo il codice a mano, ricompilando etc...) continua a non
funzionare?????
Grazie


title: C# mistero della fede

author: Mauro Servienti [MVP]

text:
Ciao MasterControl,
You wrote on 31/05/2011 :
> perchè dal nuovo progetto tutto fila liscio, e dal primo progetto pur
> ritentando molte volte(eliminando i riferimenti al connector, riscrivendo il
> codice a mano, ricompilando etc...) continua a non funzionare?????
e perchè C# sarebbe il mistero della fede? a me pare che sia il
connettore di MySql il mistero della fede :-)
.m
--
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCTS
http://mvp.support.microsoft.com/profile/mauro
blog @
http://milestone.topics.it
whynot [ at ] topics [ dot ] it


title: C# mistero della fede

text:
On Jun 1, 9:31 am, Mauro Servienti [MVP]
<mauroservie...@online.nospam> wrote:
> Ciao MasterControl,
>
> You wrote on 31/05/2011 :
>
> > perchè dal nuovo progetto tutto fila liscio, e dal primo progetto pur
> > ritentando molte volte(eliminando i riferimenti al connector, riscrivendo il
> > codice a mano, ricompilando etc...) continua a non funzionare?????
>
> e perchè C# sarebbe il mistero della fede? a me pare che sia il
> connettore di MySql il mistero della fede :-)
Eh eh.. effettivamente!
La connectionstring è la stessa :)?


title: C# mistero della fede

text:

vi ringrazio entrambi.
Sapete come ho risolto?
Avevo una copia del progetto 'incriminato' in cui non avevo ancora
inserito il codice relativo all'accesso a Mysql, quindi lavorando su
questa copia tutto è funzionato bene.
L'altra copia l'ho semplicemente cestinata... chissà forse qualche
errore nella gestione dei file della soluzione da parte di visual
studio...chissà.
haaaa dimenticavo, è possibile fare in modo che visual studio permetta
di selezionare fra le origini dati anche Mysql oltra access e SqlServer?
grazie!


title: C# mistero della fede

text:
Ciao MasterControl,
You wrote on 01/06/2011 :
> L'altra copia l'ho semplicemente cestinata... chissà forse qualche errore
> nella gestione dei file della soluzione da parte di visual studio...chissà.
dubito, ma proprio tanto :-)
> haaaa dimenticavo, è possibile fare in modo che visual studio permetta di
> selezionare fra le origini dati anche Mysql oltra access e SqlServer?
per le versioni Express credo proprio di no.



title: vb.net 2.0, downloadfileasync e proxy

author: FAbrizio Alberti

text:
Sto facendo qualche test, e sembra che in automatico, se settato il
proxy in internet explorer, il download di un file su internet
utilizzando.
Dim webClient As System.Net.WebClient = New System.Net.WebClient()
webClient.DownloadFileAsync(New Uri(URL),fileName)
avviene attraverso l'uso del proxy. E' una mia impressione o è davvero
così??!
Se così non fosse, come posso impostare che venga utilizzato il proxy
settato su Internet Explorer?
Grazie in anticpo.


title: vb.net 2.0, downloadfileasync e proxy

author: ReadOnly

text:
Il 12/11/2010 15:42, FAbrizio Alberti ha scritto:
> Sto facendo qualche test, e sembra che in automatico, se settato il
> proxy in internet explorer, il download di un file su internet
> utilizzando.
>
> Dim webClient As System.Net.WebClient = New System.Net.WebClient()
> webClient.DownloadFileAsync(New Uri(URL),fileName)
>
> avviene attraverso l'uso del proxy. E' una mia impressione o č davvero
> cosě??!
>
> Se cosě non fosse, come posso impostare che venga utilizzato il proxy
> settato su Internet Explorer?
Dai un'occhiata qui:
http://msdn.microsoft.com/it-it/library/sa91de1e.aspx
--
r--r--r--


title: vb.net 2.0, downloadfileasync e proxy

text:
> Dai un'occhiata qui:
http://msdn.microsoft.com/it-it/library/sa91de1e.aspx
Finalmente una risposta! Grazie... Ma non ci ho capito molto, puoi
spiegarmi un po'?


title: vb.net 2.0, downloadfileasync e proxy

text:

Per cambiare il proxy di default puoi creare / modificare il nodo
system.net/defaultProxy
 dell'app.config della tua applicazione usando le
chiavi e i valori descritti. Nella documentazione linkata è specificato
che in assenza di questo nodo nel config il framework usa già di suo
l'impostazione di IE, che è quello che a te interessa. Se vuoi comunque
forzarlo inserisci la chiave
<proxy usesystemdefault="true" />
Il proxy lo puoi anche commutare al volo nel codice: WebClient ha una
proprietà Proxy che accetta un IWebProxy, implementata dalla classe
WebProxy, descritta qui:
http://msdn.microsoft.com/en-us/library/system.net.webproxy%28v=VS.90%29.aspx
Ulteriori approfondimenti sul rilevamento automatico del proxy li puoi
trovare qui:
http://msdn.microsoft.com/en-us/library/fze2ytx2(VS.90).aspx
--
r--r--r--


title: vb.net 2.0, downloadfileasync e proxy

text:
> Per cambiare il proxy di default puoi creare / modificare il nodo
>
system.net/defaultProxy
 dell'app.config della tua applicazione usando le
> chiavi e i valori descritti.
No più che altro volevo che usasse quello di default, ma vedo dalla
documentazione che mi hai gentilmente fornito che è lo stesso.
Quindi mi pare di capire se modifico quel file, e compilo
l'applicazione, ottengo quel che ho chiesto.
Un ultimo dettaglio per un dilettante come me. Devo fornire
l'app.config insieme all'applicazione compilata per far usare quelle
impostazioni?
Sei stato gentilissimo e ti ringrazio ancora.


title: vb.net 2.0, downloadfileasync e proxy

text:
Il 18/11/2010 10:17, FAbrizio Alberti ha scritto:
> Un ultimo dettaglio per un dilettante come me. Devo fornire
> l'app.config insieme all'applicazione compilata per far usare quelle
> impostazioni?
Se usi il config per modificare delle impostazioni di default sì. Non è
un obbligo, suppergiù per ogni voce del config c'è un metodo/proprietà
analogo nelle classi che la usano per impostare valori specifici
ignorando sia eventuali default che il file di configurazione.
Generalizzando un po' dipende dal contesto: una delle funzioni del
config è quella di definire dei valori globali che tutte le classi del
framework ai quali sono destinati usano se presenti, è un normale file
xml che uno può aprire e modificare in qualsiasi momento secondo le sue
esigenze. E se manca basta aggiungerlo con il nome giusto! Questi
possono essere vantaggi.
Il problema è al contrario se vuoi essere sicuro che l'utente non
modifichi le impostazioni che tu hai scelto. In questo caso ti tocca
blindarle nel codice.
--
r--r--r--


title: vb.net 2.0, downloadfileasync e proxy

text: Grazie ReadOnly... Davvero molte grazie! Sei stato preziosissimo!


title: WPF: intercettare eventi/comandi

text:
Ciao a tutti,

ho una app WPF formata da più tab all'interno di una stessa shell, con
eventualmente qualche finestra di pop-up. Cercando di minimizzare il
codice da scrivere (in particolare tutto ciò che è boilerplate) tutti
gli eventi della tab (chiusura, perdita/acquisizione di focus, ecc.) più
altri sollevati dall'interno delle tab (pressione di bottoni, ecc.)
siano gestiti a livello della shell.

E' possibile?
Dove devo iniziare a documentarmi?

Grazie e buona giornata/settimana,
Giulio

--


title: WPF: intercettare eventi/comandi

text:

Ciao,
lo scenario che descrivi si presta molto di più ad essere sviluppato
con MVVM piuttosto che con la gestione eventi.

Tanto per darti un'idea, ogni volta che vuoi un contesto di backend
differente (cioè un ViewModel che si occupi di una parte di user
interface) è sufficiente che quella gerarchia di UI abbia il suo
DataContext impostato sul corrispondente ViewModel.
Nel tuo esempio avresti:
- shell bindata al ViewModel della shell
- tab (uno o più) bindati al/ai ViewModel dei tab
- tutti i viewmodel comunicano via mediator pattern la cui
implementazione di solito è "affogata" nell'implementazione di MVVM che
scegli.

Un buon kit è MVVM light che offre molto di più di quanto ti serve in
questo scenario.

Se invece vuoi andare con gli eventi ovviamente dovrai gestirti tutto
nei code-behind e redirigere le richieste su tue classi per
omogenenizzre le richieste, ma è decisamente più complesso.

--
Raffaele Rialdi
http://www.iamraf.net

Weblog:
http://blogs.ugidotnet.org/raffaele

Microsoft MVP profile
https://mvp.support.microsoft.com/profile/raffaele

UGIdotNET -
http://www.ugidotnet.org/


title: WPF: intercettare eventi/comandi

text:
Ciao Raf,

grazie per la risposta.

On 29/07/2013 09.48, Raffaele Rialdi [MVP] wrote:
> Ciao,
> lo scenario che descrivi si presta molto di più ad essere sviluppato con
> MVVM piuttosto che con la gestione eventi.

Sì, decisamente meglio così! :-)
Peraltro sto cercando di evtiare come la peste tutto ciò che non sia
100% MVVM...

> Tanto per darti un'idea, ogni volta che vuoi un contesto di backend
> differente (cioè un ViewModel che si occupi di una parte di user
> interface) è sufficiente che quella gerarchia di UI abbia il suo
> DataContext impostato sul corrispondente ViewModel.
> Nel tuo esempio avresti:
> - shell bindata al ViewModel della shell

...ce l'ho!

> - tab (uno o più) bindati al/ai ViewModel dei tab

...ce l'ho!

> - tutti i viewmodel comunicano via mediator pattern la cui
> implementazione di solito è "affogata" nell'implementazione di MVVM che
> scegli.

Ecco, questo mi manca. Il mediator devo implementarlo io? Magari usando
un sistema di messaging/weak event? Ma non è un bel po' di codice da
scrivere a mano?

Io ho fatto una cosa del genere: nel bottone con la "x" che chiude il
tab item, ho messo:

<Button Command="{Binding DataContext.CloseCommand,
RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}" ...>

ed effettivamente il mio CloseCommand, definito nel viewmodel della
shell, viene correttamente richiamato. Il problema è che da dentro al
metodo non c'è modo di tenere traccia di quale tab abbia effettivamente
invocato il comando!
Suggerimenti?

> Un buon kit è MVVM light che offre molto di più di quanto ti serve in
> questo scenario.

Visto che il progetto a cui sto lavorando è molto "didattico", vorrei
evitare di passare tramite MVVM. Ho "rubacchiato" un po' da Radical (e
conto di inserirlo pesanemente a breve), ma nella fase attuale
preferisco scrivere codice a mano. :-)

> Se invece vuoi andare con gli eventi ovviamente dovrai gestirti tutto
> nei code-behind e redirigere le richieste su tue classi per
> omogenenizzre le richieste, ma è decisamente più complesso.

Già... quindi questa soluzione la scartiamo senza neanche un po' di
rimorso. :-)

Grazie,
Giulio

--


title: WPF: intercettare eventi/comandi

text:
On 29/07/2013 10.51, Giulio Petrucci wrote:
[cut]
> <Button Command="{Binding DataContext.CloseCommand,
> RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}" ...>
>
> ed effettivamente il mio CloseCommand, definito nel viewmodel della
> shell, viene correttamente richiamato. Il problema è che da dentro al
> metodo non c'è modo di tenere traccia di quale tab abbia effettivamente
> invocato il comando!
> Suggerimenti?
[cut]

UPDATE:

<Button Command="{Binding DataContext.CloseCommand,
	RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}"
	CommandParameter="{Binding}">
	...
</Button>

:-P

Ciao,
Giulio

--


title: WPF: intercettare eventi/comandi

text:
Ciao Giulio,

You wrote on 29/07/2013 :
> Ecco, questo mi manca. Il mediator devo implementarlo io? Magari usando un
> sistema di messaging/weak event? Ma non è un bel po' di codice da scrivere a
> mano?

dipende dalle feature che vuoi, non è che ci sia poi molto li dietro.
Guardati il MessageBroker di Radical è abbastanza semplice.

.m

--
blog @ //
milestone.topics.it


title: WPF: intercettare eventi/comandi

text:
Ciao Giulio,

You wrote on 29/07/2013 :
> <Button Command="{Binding DataContext.CloseCommand,
>     RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}"
>     CommandParameter="{Binding}">
>     ...
> </Button>

sarebbe molto più sensato che la "SelectedTab" sia in binding con il
ViewModel anch'essa. Nel senso che deduco ti interessi poco sapere
quale sia effettivamente il TabItem selezionato ma piuttosto quale sia
il ViewModel dietro il TabItem selezionato.



title: WPF: intercettare eventi/comandi

text:
Ciao Mauro,

On 29/07/2013 13.32, Mauro Servienti [MVP] wrote:
> dipende dalle feature che vuoi, non è che ci sia poi molto li dietro.
> Guardati il MessageBroker di Radical è abbastanza semplice.

Ovvio!
Ormai Radical (per quanto mi riguarda) è *IL* framework, non si può
prescindere!
L'unica cosa che non capivo era se Raf alludesse a una qualche
implementazione idiomatica del mediator, ma a questo punto credo di no. :-)

Ciao,
Giulio

--


title: WPF: intercettare eventi/comandi

text:
Ciao Mauro,

On 29/07/2013 13.34, Mauro Servienti [MVP] wrote:
> sarebbe molto più sensato che la "SelectedTab" sia in binding con il
> ViewModel anch'essa. Nel senso che deduco ti interessi poco sapere quale
> sia effettivamente il TabItem selezionato ma piuttosto quale sia il
> ViewModel dietro il TabItem selezionato.

Con lo snippet di codice che ho postato, riesco a far passare il
viewmodel "incriminato" come argomento della .Execute() del comando di
chiusura. Per quanto riguarda quello che scrivi, lo aggiungerò. Però
devo considerare anche il caso in cui venga chiusa una tab non selezionata.
Vediamo come va a finire, poi vi faccio sapere.
Nel frattempo: grazie.
:-)

Ciao,
Giulio

--


title: WPF: intercettare eventi/comandi

text:
Ciao Giulio,

You wrote on 29/07/2013 :
> Ormai Radical (per quanto mi riguarda) è *IL* framework, non si può
> prescindere!

:-)



title: WPF: intercettare eventi/comandi

text:
Giulio Petrucci wrote:
> Ciao Raf,
>
> grazie per la risposta.

Prego!

>
> Sì, decisamente meglio così! :-)
> Peraltro sto cercando di evtiare come la peste tutto ciò che non sia 100%
> MVVM...
>

:)

>
> Ecco, questo mi manca. Il mediator devo implementarlo io? Magari usando un
> sistema di messaging/weak event? Ma non è un bel po' di codice da scrivere a
> mano?
>

Tipicamente tutti i framework di MVVM ce l'hanno... come anche ti ha
già detto Mauro.
Io nelle app win8 ho trovato un'alternativa al mediator perché parte
dal presupposto della navigazione in contrasto a un numero di view
indipendenti. Ma questo si presta poco alle app WPF.

>
[...]
>
> Visto che il progetto a cui sto lavorando è molto "didattico", vorrei evitare
> di passare tramite MVVM. Ho "rubacchiato" un po' da Radical (e conto di
> inserirlo pesanemente a breve), ma nella fase attuale preferisco scrivere
> codice a mano. :-)
>

Ho visto che hai già risolto e sei già sulla strada buona.
Concordo con Mauro che è meglio che il selectedtab sia segnalato al
viewmodel.

buon lavoro...



title: realizzare un client

author: ferradini

text:
Avrei bisogno di realizzare un cliente che possa interagire con un
server web.
In effetti lo scopo sarebbe quello di immettere nel server i dati che
esso richiede , cosa che normalmente avviene con un browser.
Io ne avrei bisogno per la quantità di dati da dover immettere e perché
non si facciano errori durante l'immissione.
E' possibile? Grazie Ferradini


title: realizzare un client

text:
Ciao ferradini,

certo che si, hai due strade:

- se hai controllo sul server web esporre anche un servizio (ad esempio
WCF) che esponga la logica di insert;
- realizzare un client che via WebRequest/WebClient faccia le stesse
chiamate http che farebbe il browser; Armati di pazienza e di fiddler
:-P

.m

--
blog @ //
milestone.topics.it


title: realizzare un client

text:
Il 06/04/2012 07:41, Mauro Servienti [MVP] ha scritto:

> - se hai controllo sul server web esporre anche un servizio (ad esempio
> WCF) che esponga la logica di insert;
> - realizzare un client che via WebRequest/WebClient faccia le stesse
> chiamate http che farebbe il browser; Armati di pazienza e di fiddler :-P

A questo punto mi sono accorto che la parte dove si immettono i dati è
realizzata in flash. Credo che cambi tutto.
Non ho mai usato un fiddler, andrebbe ancora bene?
grazie


title: realizzare un client

text:
Il 06/04/2012 07:41, Mauro Servienti [MVP] ha scritto:

> - se hai controllo sul server web esporre anche un servizio (ad esempio
> WCF) che esponga la logica di insert;
> - realizzare un client che via WebRequest/WebClient faccia le stesse
> chiamate http che farebbe il browser; Armati di pazienza e di fiddler :-P




title: realizzare un client

text:

Forse sì, forse no, dipende da come il client flash comunica col server:
flash offre molteplici possibilità, se passa attraverso http non
dovresti avere problemi.

In caso contrario puoi usare wireshark per ravanare direttamente nei
pacchetti di dati. Una cosa snervante, ma con un po' di documentazione
(scarsa e in parte pure toppata...) e - appunto - wireshark tempo fa ero
riuscito a mettere in piedi un client in grado di connettersi ad un
server rtmpt (stream video di flash incapsulato in finte chiamate http)
abbastanza completo da connettersi e fare le chiamate rpc per avviare la
riproduzione e mantenere lo stream dei dati attivo (senza riprodurre il
video, non era quello lo scopo del progetto). Il tutto osservando il
traffico tra un player vero e wowza.

In generale però se non sono chiamate http né xmlsocket - un protocollo
con il quale flash apre un socket verso il server e comunica
bidirezionalmente con questo scambiandosi stringhe C-style (terminate
dal carattere 0x00) contenenti xml che è molto semplice riprodurre in
.Net - potrebbe essere una rogna notevole.

--
r--r--r--


title: realizzare un client

text:
Indirizzato a readonly

Mi piacerebbe scambiare alcune impressioni con te visto che già conosci
il problema. Se ti va ci sentiamo in privato. Ferradini


title: realizzare un client

text:
Il 06/04/2012 20:17, ferradini ha scritto:
> Mi piacerebbe scambiare alcune impressioni con te visto che già conosci
> il problema. Se ti va ci sentiamo in privato. Ferradini

No problem, la mail nell'header dei tuoi messaggi è valida?


title: realizzare un client

text:
> No problem, la mail nell'header dei tuoi messaggi è valida?

si, lo è.


title: realizzare un client

text:
"ferradini" <
gianmarco...@email.it
> wrote in message
news:jlmt9a$3e1$2...@tdi.cu.mi.it...

> A questo punto mi sono accorto che la parte dove si immettono i dati è
> realizzata in flash. Credo che cambi tutto.

Vado a memoria, ma credo che da Flash non ci siano problemi ad invocare un
XML Web Service...

-LV


title: Inglobare .config nell'exe

author: FlickerFree

text:
Ciao a tutti, sto sviluppando un'applicazione che purtroppo utilizza una
libreria esterna compatibile solo col framework 2.0.
Per questo motivo, devo dichiarare il supporto al .NET Framework 2.0 nel
.config separato, ci� comporta per� che su PC diversi dal mio di sviluppo,
pur essendoci installato il 2.0, se non copio anche il .config l'eseguibile
non parte nemmeno.
C'� modo di "inglobare" il .config nell'exe in modo da avere un file unico
da distribuire ?
Sto utilizzando Visual Studio 2010 con SP1.
FlickerFree.


title: Inglobare .config nell'exe

text:
FlickerFree wrote:
> Ciao a tutti, sto sviluppando un'applicazione che purtroppo utilizza una
> libreria esterna compatibile solo col framework 2.0.
>
> Per questo motivo, devo dichiarare il supporto al .NET Framework 2.0 nel
> .config separato, ciò comporta però che su PC diversi dal mio di sviluppo,
> pur essendoci installato il 2.0, se non copio anche il .config l'eseguibile
> non parte nemmeno.
>
> C'è modo di "inglobare" il .config nell'exe in modo da avere un file unico da
> distribuire ?
>
> Sto utilizzando Visual Studio 2010 con SP1.
>
> FlickerFree.
Qui trovi un suggerimento:
http://stackoverflow.com/questions/1846975/how-do-you-embed-app-config-in-c-projects
Io credo che dovresti fare una cosa leggermente differente:
- stabilire i default in caso di mancanza del .config
- usare i settings del .config se viene creato
in questo modo puoi shippare l'app senza .config ma sei sempre in grado
di poter modificare le impostazioni in caso di necessità.
--
Raffaele Rialdi
http://www.iamraf.net
Weblog:
http://blogs.ugidotnet.org/raffaele
Microsoft MVP profile
https://mvp.support.microsoft.com/profile/raffaele
UGIdotNET -
http://www.ugidotnet.org/


title: Inglobare .config nell'exe

text:
> Io credo che dovresti fare una cosa leggermente differente:
> - stabilire i default in caso di mancanza del .config
> - usare i settings del .config se viene creato
> in questo modo puoi shippare l'app senza .config ma sei sempre in grado
> di poter modificare le impostazioni in caso di necessità.
Grazie, ci provo.
FlickerFree.


title: Problema con serializzazione e binary formatter

text:
Ciao a tutti.
Avendo la necessità di serializzare una gerarchia di classi
discretamente grande che descrive un modello di dati, ho pensato di
provare a usare il binary formatter del .net e decorare le classi
interessate con l'attributo [Serializable] e imponendo il
[NonSerialized] o [field: NonSerialized] dove non mi serviva la
persistenza (impostazione, come dicono "loro", "opt-out").
Purtroppo la classe "padre" Application ha due membri siffatti:
         public event ScopeEventHandler scopeAdded;
         public event ScopeEventHandler scopeRemoved;
e c'è un ViewModel chiamato VariableEditorViewModel che sottoscrive tali
eventi, che però io non voglio serializzare:
             currentApplication.scopeAdded += new
ScopeEventHandler(currentApplication_scopeAdded);
             currentApplication.scopeRemoved += new
ScopeEventHandler(currentApplication_scopeRemoved);
uno di questi due gestori è così fatto:
         private void currentApplication_scopeAdded(object sender,
ScopeEventArgs e)
         {
             _treeViewItemsVMCollection.Add(new ScopeViewModel(e.Scope));
             this.OnPropertyChanged("TreeViewItemsVMCollection");
         }
dove _treeViewItemsVMCollection è una collection bindata all'itemssource
di una treeview. In pratica lo scopo di tutto ciò è assicurare che
quando al modello viene aggiunto un elemento (scope) la view soprastante
se ne accorga ed aggiunga un nodo all'albero presente nella UI, passando
attraverso il viewmodel "mediatore".
Vedendo che la richiesta di serializzare VariableEditorViewModel
derivava proprio dalla sottoscrizione degli eventi della classe di
modello, pensavo che per evitare ciò bastasse imporre:
[field: NonSerialized]
public event ScopeEventHandler scopeAdded;
e infatti non mi viene più richiesto di rendere VariableEditorViewModel
[Serializable], ma con mia somma sorpresa (dovuta probabilmente a somma
ignoranza) mi viene richiesta la serializzabilità di...
ScopeViewModel !!!
di cui viene invocata l'istanziazione nel gestore
currentApplication_scopeAdded di cui sopra.
Come è possibile? "che cavolo sta succedendo, Willis?"
Come esco dall'impasse?
Grazie


text:
marcosabba wrote:
>
> [field: NonSerialized]
> public event ScopeEventHandler scopeAdded;
fai la prova di esplicitare l'evento in field + accessor usando
add/remove. Quindi metti NonSerialized sulla dichiarazione del field.
--
Raffaele Rialdi
http://www.iamraf.net
Weblog:
http://blogs.ugidotnet.org/raffaele
Microsoft MVP profile
https://mvp.support.microsoft.com/profile/raffaele
UGIdotNET -
http://www.ugidotnet.org/


text:
Il 21/01/2011 13:34, Raffaele Rialdi [MVP] ha scritto:
> fai la prova di esplicitare l'evento in field + accessor usando
> add/remove. Quindi metti NonSerialized sulla dichiarazione del field.
>
         //VERSIONE ESTESA
         [NonSerialized]
         private ScopeEventHandler _scopeAdded;
         public event ScopeEventHandler scopeAdded
         {
             add { _scopeAdded += value; } // Not Thread-safe
             remove { _scopeAdded -= value; } // Not Thread-safe
         }
così, giusto? già provato, non va neanché così.
Per ora ho abdicato, ripiegando sul DataContractSerializer che con i
dovuti cambiamenti e settaggi ora funziona e non si tira dietro il
viewmodel. Poi forse per i miei scopi va pure meglio.
Comunque grazie per la risposta!


text:

Prego. Hai sicuramente da qualche parte un altro reference
(probabilmente indiretto) che punta al VM.
Il DataContractSerializer ha il vantaggio di essere opt-in e quindi
serializza solo ciò che marchi esplicitamente con datamember, ma è
molto 'povero'.
Hai provato invece il NetDataContractSerializer? È decisamente più
performante.



text:
Il 21/01/2011 14:22, Raffaele Rialdi [MVP] ha scritto:
> Prego. Hai sicuramente da qualche parte un altro reference
> (probabilmente indiretto) che punta al VM.
ragionandoci un po' è come se da qualche parte _nella classe del
modello_, e non nel viewmodel, vengano inseriti riferimenti di tutti gli
handler registrati (probabilmente deve essere così, non conosco i
dettagli), però mentre per il DataContractSerializer basta non inserire
come DataMember gli eventi, per il binary formatter pare che non sia
sufficiente marcarli come NonSerialized.
Ma adesso non fa nulla. Addirittura googlando ho visto qualcuno che
diceva che l'unico modo di ovviare a una situazione molto simile era
usare dei Serialize Surrogate al posto del viewmodel, ma, oltre ad
essere una cosa decisamente "brutta", nel mio caso avrei dovuto imporre
troppe "porcate" per permettere la visibilità tra progetti che non
volevo avessero dipendenze tra loro.
> Il DataContractSerializer ha il vantaggio di essere opt-in e quindi
> serializza solo ciò che marchi esplicitamente con datamember, ma è molto
> 'povero'.
> Hai provato invece il NetDataContractSerializer? È decisamente più
> performante.
Ho visto che esiste, ma non conoscendolo ritenevo che fosse usato solo
per scopi più "remoti". Magari gli do uno sguardo, grazie ancora.


text:
marcosabba wrote:
> ragionandoci un po' è come se da qualche parte _nella classe del modello_, e
> non nel viewmodel, vengano inseriti riferimenti di tutti gli handler
> registrati (probabilmente deve essere così, non conosco i dettagli), però
> mentre per il DataContractSerializer basta non inserire come DataMember gli
> eventi, per il binary formatter pare che non sia sufficiente marcarli come
> NonSerialized.
Se guardi con il debugger l'oggetto, ramo per ramo, forse riesci a
capire dov'è l'inghippo. In pratica espandi tutti i rami e vedi se
arrivi al viewmodel in qualche modo che non sia l'evento
> Ma adesso non fa nulla. Addirittura googlando ho visto qualcuno che diceva
> che l'unico modo di ovviare a una situazione molto simile era usare dei
> Serialize Surrogate al posto del viewmodel, ma, oltre ad essere una cosa
> decisamente "brutta", nel mio caso avrei dovuto imporre troppe "porcate" per
> permettere la visibilità tra progetti che non volevo avessero dipendenze tra
> loro.
>
Alternativamente puoi implementare ISerializable invece di mettere
l'attributo [Serializable].
In questo modo hai pieno controllo su come serializzare l'oggetto
> Ho visto che esiste, ma non conoscendolo ritenevo che fosse usato solo per
> scopi più "remoti". Magari gli do uno sguardo, grazie ancora.
In pratica il Net usa le info di assembly e type del clr, evitando così
la verbosità necessaria a descriverli in xml. Questo riduce l'xml e di
conseguenza migliora le performance.



title: XML Editor Toolbox

author: Lorenzo

text:
Buon Giorno a tutti.
Vorrei inserire una finestra di editing per file XML in un programmino che
ho fatto in C# ma non so se esista un toolbox già "confezionato" in grado di
farlo.
Qualcuno potrebbe aiutarmi?
Grazie per i consigli.


title: [c#] Dividere stringa

author: nervo

text:
ciao a tutti
mi potete aiutare a dividere la stringa che indico (la stringa
originale è più lunga), e che secondo me non ha una logica che mi
consenta di suddividerla?
Ho provato con split ma non ho avuto risultati, visto che il metodo
permette l'inserimento di un char che io non ho.
PDataOraVerificaGiorno="mer" POraVerifica="09:50"
SIGLAIMPIANTO="009/019697" SiglaTariffa="inf. 100"
SiglaTipo="Controllo D' ufficio" SiglaEsito="Att. invio lettera"
grazie per le risposte
nervo


title: [c#] Dividere stringa

text:
Ciao nervo,

A livello puramente logico ti direi che l'unico pattern (utile)
ricorrente mi sembra essere:
="*"
che in pseudo-giulio-codice sarebbe
"uguale-virgolette-qualsiasicosa-virgolette-spazio". Identificate le
posizioni del pattern hai che ciò che viene prima dell' "=" è il nome
della property e ciò che è compreso tra le virgolette è il valore.
HTH,
Giulio
--


title: [c#] Dividere stringa

author: nibble

text:
Prova questa espressione regolare:
(\w+)="((.|\n)*?)"
Dovresti avere:
PDataOraVerificaGiorno="mer"
POraVerifica="09:50"
eccetera.
ciao


title: [c#] Dividere stringa

author: Smalville

text:

Potresti anche fare un replace di =" con = e di "  con ;
A questo splitti tranquillamente su ; per avere la coppia chiave/
valore e su = per ottenere i singoli campi


title: VB.Net ide OleDbCommand.Parameters bug

author: Gianfranco Pini

text:
Salve,
devo ricompilare con VB.Net 2010 sp1 un progetto realizzato con VB.Net
2003 (windows form).
Il progetto contiene oggetti OleDbCommand con molti parametri (>150).
Quando vado a salvare il progetto l'ide impiega diversi minuti a
completare l'operazione (con vb2003 era istantaneo).
Il process devenv rimane in attesa di queste funzioni

msvbide.dll!?ReplaceLinesEx
msvbide.dll!?GetLengthOfLine

probabilmente perchè in vb2010 il generatore di codice di Windows Form
utilizza il metodo AddRange per aggiungere i parametri

OleDbCommand.Parameters.AddRange(...150 parametri sulla stessa linea...)

il codice generato risulta quindi una linea di oltre 30000 caratteri
mentre invece vb2003 aggiungeva i parametri uno per uno

OleDbCommand.Parameters.Add(...parametro...)
OleDbCommand.Parameters.Add(...parametro...)

Domanda:
è un problema noto? esiste una hotfix?
se mando la segnalazione a Microsoft c'è possibilità che venga corretto
o mi diranno di usare query con meno parametri?
grazie
ciao


title: il perché delle interfacce

text:
Si legge da MSDN "Un'interfaccia è simile a una classe base astratta:
qualsiasi tipo non astratto che eredita l'interfaccia deve implementarne
tutti i relativi membri."
Quindi se io scrivo ad esempio diciamo 10 classi che derivano da
interface, devo implementare per ognuna di queste classi i metodi
dell'interfaccia.
Se questa mia interpretazione è corretta non ne comprendo l'utilità, ma
senz'altro non è così...
Il perché usare le interfacce mi è oscuro...
Chiedo lumi su questo, grazie.


title: il perché delle interfacce

text:

Guarda ad un'interfaccia come un contratto.
In un interfaccia descrivi cosa offre e come manipolare gli oggetti.
IAnimale potrebbe descrivere:
- la proprietà Zampe di tipo int che dovrà restituire il numero di
zampe dell'animale
- la proprietà Colore
- il metodo Cammina che andrà a sottrarre un certo numero di calorie
Le classi Uomo e Pantera implementeranno quest'interfaccia perché hanno
quelle caratteristiche ma la loro implementazione sarà differente.
Il vantaggio dell'interfaccia è che una classe puoi implementarne più
di una (multiple inheritance) mentre una classe non può derivare da più
di una classe base (single inheritance).
Il vantaggio della classe astratta base è che può provvedere ad
un'implementazione comune a più classi che la deriveranno. In quanto
astratta, non può essere istanziata e andrà derivata. Le classi
derivate potranno usare le implementazioni base oppure riscriverle
totalmente o chiamarle per poi fare altre cose.
Cerca prima di inquadrare il problema generale. La sintassi poi viene
da sé in quanto è molto più semplice rispetto a C++.
--
Raffaele Rialdi
http://www.iamraf.net
Weblog:
http://blogs.ugidotnet.org/raffaele
Microsoft MVP profile
https://mvp.support.microsoft.com/profile/raffaele
UGIdotNET -
http://www.ugidotnet.org/


title: il perché delle interfacce

author: LudovicoVan

text:
On Mar 26, 6:58 am, ferradini <
ferrad...@email.it
> wrote:
> Si legge da MSDN "Un'interfaccia simile a una classe base astratta:
> qualsiasi tipo non astratto che eredita l'interfaccia deve implementarne
> tutti i relativi membri."
A corredo della gia' ottima risposta di Raf aggiungo che una classe
astratta non e' poi cosi' simile ad un interfaccia: una classe
astratta puo' implementare proprieta', metodi e avere membri privati,
cioe' puo' fare piu' o meno tutto quello che puo' fare una classe
concreta se non che non puo' essere istanziata e ti impone di usare
classi derivate per poter istanziare oggetti. Di solito una classe
astratta implementa tutta la logica generale/comune ed espone uno o
piu' membri appunto astratti che sono poi gli unici a cui la classe
derivata deve dare una implementazione concreta.
-LV


title: il perché delle interfacce

text:

In generale, una cosa e' una gerarchia di classi, dove la classe base
spesso e' astratta, e l'uso di interfaccie per simulare
l'ereditarieta' multipla e' piuttosto un trucco un po' "sporco". Altra
cosa sono le interfaccie, il cui uso primario e' di essere esposte al
livello di boundary fra componente diversi di un sistema.
-LV


title: il perché delle interfacce

text:
Il 26/03/2011 16:08, LudovicoVan ha scritto:
> On Mar 26, 2:55 pm, LudovicoVan<
ju...@diegidio.name
>  wrote:
>> On Mar 26, 6:58 am, ferradini<
ferrad...@email.it
>  wrote:
CUT
>> A corredo della gia' ottima risposta di Raf aggiungo che una classe
>> astratta non e' poi cosi' simile ad un interfaccia: una classe
>> astratta puo' implementare proprieta', metodi e avere membri privati,
>> cioe' puo' fare piu' o meno tutto quello che puo' fare una classe
>> concreta se non che non puo' essere istanziata e ti impone di usare
>> classi derivate per poter istanziare oggetti. Di solito una classe
>> astratta implementa tutta la logica generale/comune ed espone uno o
>> piu' membri appunto astratti che sono poi gli unici a cui la classe
>> derivata deve dare una implementazione concreta.
>
> In generale, una cosa e' una gerarchia di classi, dove la classe base
> spesso e' astratta, e l'uso di interfaccie per simulare
> l'ereditarieta' multipla e' piuttosto un trucco un po' "sporco".
a tal proposito, in C#, l'ereditarietà è identica a quella
nativa del C++ ?
ciao
Soviet



title: il perché delle interfacce

text:
On Mar 26, 7:14 pm, Soviet_Mario <Soviet.Ma...@CCCP.MIR> wrote:
> in C#, l'ereditarietà è identica a quella nativa del C++ ?
Ovviamente no: tanto per dirne una, appunto in C# (o in VB) non hai
ereditarieta' multipla.
Comunque penso che non ci sia neanche in C++/CLI, visto che ci sono
tutte le restrizioni necessarie a rendere il codice appunto conforme
alla specifica CLI.
-LV


title: il perché delle interfacce

text:
Soviet_Mario wrote:
> a tal proposito, in C#, l'ereditarietà è identica a quella nativa del C++ ?
A parte il concetto base che è identico in ogni linguaggio oo, ci sono
significative differenze. Tanto per fare un esempio in C# mancano
l'ereditarietà multipla per le classi e la visibilità (non esiste
ereditarietà privata).



title: il perché delle interfacce

text:
LudovicoVan wrote:
> Comunque penso che non ci sia neanche in C++/CLI, visto che ci sono
> tutte le restrizioni necessarie a rendere il codice appunto conforme
> alla specifica CLI.
Confermo e proprio per il motivo che hai detto



title: il perché delle interfacce

text:
Il 26/03/2011 20:42, Raffaele Rialdi [MVP] ha scritto:
> Soviet_Mario wrote:
>> a tal proposito, in C#, l'ereditarietà è identica a quella nativa del
>> C++ ?
>
> A parte il concetto base che è identico in ogni linguaggio oo, ci sono
> significative differenze. Tanto per fare un esempio in C# mancano
> l'ereditarietà multipla per le classi e la visibilità (non esiste
> ereditarietà privata).
>
mi aggiungo in coda....
un'interfaccia definisce anche un "tipo", quindi puoi passare qualunque
oggetto la implementi laddove ci si aspetta un "tipo" di interfaccia in
particolare, a prescindere da come i vari oggetti implementano i metodi
dell' interfaccia.


title: il perché delle interfacce

text:
Il 26/03/2011 20:14, Soviet_Mario ha scritto:
> Il 26/03/2011 16:08, LudovicoVan ha scritto:
Grazie a tutti delle precise delucidazioni
ciao
Soviet
>
>


title: il perché delle interfacce

text:
ho creato due  interfacce
IFileIo e IQueryBase due classi e le relative implementazioni nelle
classi FileIO e QueryBase.
Adesso creo una classe così:
  class Installa:IFileIO,IQueryBase
     {
         public FileIO fio = new FileIO();
         public XQueryBase xq = new XQueryBase();
         public void CreaDataBase()
         {
         }
     }
alla compilazione mi da errori elencandomi per tutti metodi usati
Errore	1	'CoGe.Installa' non implementa il membro di interfaccia
'CoGE.IQueryBase.GetColumn<T>(string)'	D:\Visual Studio
2010\Projects\CoGE\Installa.cs
Cosa vuol dire questo che anche all'interno della classe installa devo
reimplemantare i metodi?
Non mi sembra coerente.....
L'esempio del codice è quello riportato (con le trasposizioni del case)
è tratto dalla rete.
Grazie Ferradini


title: il perché delle interfacce

author: dedalus

text:
On 28/03/2011 17:07, ferradini wrote:
> Non mi sembra coerente
coerente con cosa?


title: il perché delle interfacce

text:

scusa mi è partita la risposta senza volerlo:
la coerenza c'è tutta perché un'interfaccia introduce un polimorfismo di
comportamento nelle classi, per cui si presuppone che ogni classe debba
"ridefinire" il proprio specifico comportamento.
Ciao.


title: il perché delle interfacce

text:
Il 28/03/2011 17:07, ferradini ha scritto:
> ho creato due interfacce
> IFileIo e IQueryBase due classi e le relative implementazioni nelle
> classi FileIO e QueryBase.
forse qui inizia il fraintendimento: le classi FileIO e QueryBase
implementano le interfacce IFileIo e IQueryBase, ma non sono _necessarie_.
Tutto quello che tu imponi scrivendo delle interfacce è che chi le
implementa, cioè _sia_ FileIO e QueryBase, _sia_ Installa, _devono_
fornire un'implementazione dei metodi che hai _dichiarato_ nelle
interfacce: è appunto un contratto.
Cioè tu mi dici:
"io classe Installa implemento IFileIO e IQueryBase"
e io capisco:
"allora per contratto _devi_ avere un'implementazione di
GetColumn<T>(string), etc etc..."
Quello che forse volevi tu era una classe astratta, che appunto ti
consente di dichiarare metodi astratti (senza corpo, tipo semplice
dichiarazione) da implementare _obbligatioramente_ nelle classi
derivate, ma anche metodi con implementazione, che possono essere
semplicemente richiamati o sovrascritti (override) da una classe derivata.
Nel tuo caso FileIO, QueryBase e Installa sono allo stesso identico
"livello gerarchico" anche se detta così è una forzatura, ma è per
capirci che Installa non eredita nulla da FileIO, QueryBase.


title: il perché delle interfacce

text:
Allora chiedo (confessando nel contempo la mia profonda ignoranza del
c#):  per derivare Installa da due classi IFileIO e IQueryBase, come
mannaggia ......  si fa?
Può Installa usufruire dei metodi delle due classi FileIO e QueryBase?
Ovviamente senza reimplementare GetColumn<T>(string) e le altre?
Se si chiedo cortesemente come si fa, se non è possibile evidentemente
la logica del C# sfugge dalle mie conoscenza.


title: il perché delle interfacce

text:

Non è un problema di c# ma di OOP.
Non mi è chiaro il dominio che stai progettando, ma così a orecchio non
penso che una classe Installa possa derivare da una classe FileIO e una
classe QueryBase. Se fosse possibile, Installa dovrebbe essere
contemporaneamente "un tipo di" FileIO e "un  tipo di" QueryBase...
se anche fosse possibile, in .Net non lo puoi fare perché il framework
non consente l'ereditarietà multipla!
Sempre a orecchio (quindi potrei sbagliare perché non so che stai
astraendo...), credo che la tua classe Installa, debba usare 2
interfacce e non 2 classi... anche se sbaglio, però, in c# al massimo
potresti derivare da una sola delle 2 e l'altra la dovresti sempre
implementare come interfaccia (e quindi, si! dovresti riscriverti i
metodi in base al "comportamento" di Installa)...
Ciao


title: il perché delle interfacce

text:
On Mar 28, 6:31 pm, ferradini <
ferrad...@email.it
> wrote:
> Allora chiedo (confessando nel contempo la mia profonda ignoranza del
> c#):  per derivare Installa da due classi IFileIO e IQueryBase, come
> mannaggia ......  si fa?
> Pu Installa usufruire dei metodi delle due classi FileIO e QueryBase?
> Ovviamente senza reimplementare GetColumn<T>(string) e le altre?
> Se si chiedo cortesemente come si fa, se non possibile evidentemente
> la logica del C# sfugge dalle mie conoscenza.
Come gia' detto, in .Net non hai ereditarieta' multipla. Inoltre sono
davvero rari i casi in cui l'ereditarieta' multipla e' davvero
necessaria, mentre piu' spesso indica complicazioni inutili al livello
di disegno delle classi.
Cio' detto, in questo caso specifico un suggerimento piu' o meno
scontato e' che la classe Installa sia piuttosto un composizione (*)
sopra alle due classi FileIO e QueryBase. Se quindi, nel caso piu'
semplice, esponi le due classi in questione direttamente come
proprieta' della classe contenitore, un client puo' fare direttamente
cose del tipo installa.FileIO.MetodoX(), ecc. Altrimenti, se occorre
che le due classi contenute siano nascoste al client, la classe
contenitore dovra' necessariamente implementare dei metodi al minimo
con la logica per inoltrare/smistare le chiamate.
In ogni caso, l'effettiva necessita' di esporre interfacce e su quali
classi sarebbe un po' tutta da rivedere: ricorda che le interfaccia in
generale vanno usate solo al livello di boundary dei componenti:
quindi definisci le interfacce tenendo conto di cosa un eventuale
(codice) client deve vedere.
(*) E' la relazione "has a":
http://en.wikipedia.org/wiki/Object_composition
-LV


title: il perché delle interfacce

text:
Vedo che ci stiamo avvicinando al nocciolo del problema.
In effetti le due classi devono essere utilizzate in Installa, ma
concettualmente non hanno niente a che vedere con installa.
Potrei scrivere qualcosa del tipo
Class Installa {
FileIO fio = new FileIO;
QueryBase xq = new QueryBase;
}
e cosi via per ogni altro metodo che eventualmente andrei ad utilizzare
per Installa.
Oppure potrei scrivere qualcosa del tipo class QueryBase:FileIO
e poi Installa:QueryBase, cosi Installa usufruisce sia di FileIO che di
QueryBase. Ma non mi sembra un gran che come soluzione, anche perchè non
permette di ereditare solo dalla catena QueryBase: FileIO
Un anno fa chiesi a un newsgroup come fare e mi si rispose di rivolgermi
a una eredita multipla (simulata in qualche modo.
Da qui sono passate attraverso ripetute prove capendone sempre di meno e
senza nessun risultato.
Morale della favola: sono ancora al punto di partenza e l'unica via che
riesco a praticare è quella soprastante, cioè
Class Installa {
FileIO fio = new FileIO;
QueryBase xq = new QueryBase;
}


title: il perché delle interfacce

text:
Il 29/03/2011 07:52, ferradini ha scritto:
> Morale della favola: sono ancora al punto di partenza e l'unica via che
> riesco a praticare è quella soprastante, cioè
>
> Class Installa {
> FileIO fio = new FileIO;
> QueryBase xq = new QueryBase;
> }
e secondo me è la migliore, perché rispecchia il fatto che per
"Installare" *usi* i servizi di FileIO e QueryBase, mentre non è vero
che Installa *estende* le funzionalità di un FileIO e QueryBase fornendo
un servizio più specializzato: Installa (immagino) è una classe per fare
un'operazione "una tantum", mentre FileIO e QueryBase (immagino) sono
delle classi "toolbox".
Al limite, se proprio tu volessi, potresti estrarre da FileIO e
QueryBase un insieme comune di funzionalità che ti servono e farci una
classe "InstallaToolBox" da ereditare, ma come detto sopra non mi suona
come la cosa più corretta a livello di architettura.


title: il perché delle interfacce

text:
Il 29/03/2011 07:52, ferradini ha scritto:
>

ma stile a parte, cosa ti disturba tanto della filosofia
"HAS A" invece che "IS A" ?
Nel senso che a me sembra buona : al prezzo di
un'indirezione in più (peraltro solo in apparenza, perché
cmq la vedi in più codificando ma internamente ti scansi un
puntatore nella virtual table), hai cmq il tuo bravo
intellisense per percorrere la gerarchia degli oggetti.
L'unica difficoltà filosofica la vedo nel concetto che
l'ereditarietà diretta "IS A" è più pertinente quando non
puoi ereditare da più di una sola istanza di un dato tipo
base, mentre "HAS A" è più adatta (anzi la sola adatta a
meno di non avere delle siblings) quando un dato oggetto può
avere dentro più di una istanza contemporanea di un dato
tipo base. MA nessuno vieta che sia esattamente una nel
secondo caso, come il tuo esempio.
E non mi pare particolarmente error prone, dato che non ti
scappano dentro istanze per caso, se non crei una
dichiarazione apposta di un membro, dotato di nome.
Poi personalmente ti dirò che ho sempre preferito quella
forma che a te non piace (e in modo squisitamente formale
non è nemmeno considerata ereditarietà, in quanto non
comporta override di nessun nome), perché se hai la memoria
corta e dimentichi la gerarchia di classi, con
l'ereditarietà vera e propria, trasparente, ti dimentichi
quale classe a quale livello starà rispondendo al metodo
virtual (sono tutti omografi ovviamente). Mentre con lo
scope resolving, la vedi subito la catena di indirezioni.
Ok, è un po' greve da scrivere, forse meno immediata la
scrittura dei costruttori, ma tutto lì ... very imho)
ciao
Soviet
>
>


title: Delucidazioni su Wpf

author: Romano

text:
Ciao a tutti,
vi pongo il mio problema sperando in suggerimenti appropriati:
Ho un'applicazione funzionante con una winform dove vado a caricare in
una TabControl tante schede quante sono le categorie e per ogni scheda
vado a visualizzare una griglia di image per quanti sono i prodotti di
qual settore.
Spero di avere reso l'idea.
La mia fonte dati è una Dictionary<settore, List<Prodotto>>.
Per caricare i dati dal db impiego e gestire la Di , circa 3 sec.
Per visualizzare la tabcontrol con le varie schede impiego circa 30 sec.
Allora mi son detto: Vediamo di approcciare il problema mediante wpf,
con la speranza, che il caricamento della TabControl sia + veloce.
Ipotizzato che sia vero che con wpf si accorciano i tempi di caricamento
della tabcontrol i dubbi cominciano ad assalirmi.
I problemi per uno che si è avvicinato da poco a wpf sono tanti.
Nel mio window.xaml aggiungo una Tabcontrol che chiamo Tab1.
    A questo punto a runtime devo inserire tante schede quanti sono i
    settori.
    Ad ogni scheda devo aggiungere una grid dove a runtime devo
aggiungere tante celle, in orizzontale ed in verticale, quanti sono i
prodotti di ogni settore.
In ogni cella devo mettere un'image con il nome del prodotto ed
eventualmente una foto.
Bel malloppo, vero ?
Come si fa tutto ciò ?
Cosa devo bindare ? E come ?
Chi mi da una mano a chiarirmi le idee ?
Thanks.


title: Delucidazioni su Wpf

text:
Ciao Romano,
You wrote on 04/05/2011 :
> Bel malloppo, vero ?
No, direi banale se sai come funziona il tutto.
> Come si fa tutto ciò ?
Binding :-)
> Cosa devo bindare ? E come ?
Gli items del tab control sono in binding con la lista di settori,
dentro ogni Tab c'è un Template che contiene la griglia che è in
binding con i prodott del sttore, definisci il template per le celle in
modo da avere la visualizzazione delle immagini.
.m
--
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCTS
http://mvp.support.microsoft.com/profile/mauro
blog @
http://milestone.topics.it
whynot [ at ] topics [ dot ] it


title: Delucidazioni su Wpf

text:
Il 04/05/2011 12:00 PM, Mauro Servienti [MVP] ha scritto:
Innanzitutto ti ringrazion della risposta.
> Gli items del tab control sono in binding con la lista di settori,
Tutto ok. Già impostato.
> dentro ogni Tab c'è un Template che contiene la griglia che è in binding
> con i prodott del sttore
Mi dai un esempio di template del tab ?
Ad es. se volessi usare la wrapPanel:
<ScrollViewer VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch">
           <WrapPanel Background="LightBlue" Width="200" Height="Auto"
Name="wrap1" >
           </WrapPanel>
          </ScrollViewer>
Come faccio poi in code behind ad aggiungere tante button (oppure image)
quanti sono i prodotti del settore ?
                 Button btn1 = new Button();
                 btn1.Content = "Button " + i.ToString();
                 btn1.Width = width1;
                 wrap1.Children.Add(btn1);
Il wrap1 è il wrappanel di una relativa tab.
Come faccio a legare tutto ciò?
, definisci il template per le celle in modo da
> avere la visualizzazione delle immagini.
Questo ultimo punto penso che sia legato alla grid


title: Delucidazioni su Wpf

text: Nessuno che mi dia una risposta ?


title: Delucidazioni su Wpf

author: marcosabba

text:
Il 05/05/2011 12:42, Romano ha scritto:
> Nessuno che mi dia una risposta ?
Vedi se questo può aiutarti, giusto per capire che la strada è quella
dei datatemplates (non devi aggiungere componenti lato codice c#).
Se ho tempo ti faccio qualche esempio più mirato per il tuo caso, per
ora vedi se può andare questo:
http://www.wpftutorial.net/DataTemplates.html


title: Delucidazioni su Wpf

text:

Grazie, darò un'occhiata al link.


title: Delucidazioni su Wpf

text:

Ho cercato di capire il contenuto del Link, ma sinceramente, non ho
trovato modo di avere risposte ai miei dubbi.
In particolare non riesco a bindare la griglia in quanto la
List<Prodotto> della dictionary, cioè la parte Value della Dictionary.
Es. di dati:
             Cat ct = new Cat { NameCat = "cat1" };
             List<Prod> listA = new List<Prod>();
             listA.Add(new Prod{ Name = "pA1", Categ=ct });
             listA.Add(new Prod { Name = "pA2", Categ=ct});
             listA.Add(new Prod { Name = "pA3", Categ=ct});
             List<Prod> listB = new List<Prod>();
             listB.Add(new Prod { Name = "pB1" });
             listB.Add(new Prod { Name = "pB2" });
             listB.Add(new Prod { Name = "pB3" });
             listB.Add(new Prod { Name = "pB4" });
             listB.Add(new Prod { Name = "pB5" });
             listB.Add(new Prod { Name = "pB6" });
             List<Prod> listC = new List<Prod>();
             listC.Add(new Prod { Name = "pC1" });
             this.TheTabControl.ItemsSource = data;
Parte Xaml:
  <TabControl.ItemTemplate>
                 <DataTemplate>
                     <TabItem Header="{Binding Key}">
                         <ItemsControl ItemsSource="{Binding Value}">
                             <ItemsControl.ItemsPanel>
                                  <ItemsPanelTemplate>
                                      <Border HorizontalAlignment="Left"
VerticalAlignment="Top" BorderBrush="Black" BorderThickness="2">
                                        <ScrollViewer
VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                                          <WrapPanel
Background="LightBlue" Width="200" Height="Auto" Name="wrap1" >
                                                       ????????????????????
                                          </WrapPanel>
                                        </ScrollViewer>
                                      </Border>
                                 </ItemsPanelTemplate>
                             </ItemsControl.ItemsPanel>
                         </ItemsControl>
                       </TabItem>
                 </DataTemplate>
                 </TabControl.ItemTemplate>


title: Delucidazioni su Wpf

text:
Ciao Romano,
You wrote on 06/05/2011 :
>                              <ItemsControl.ItemsPanel>
>                                   <ItemsPanelTemplate>
>                                       <Border HorizontalAlignment="Left"
> VerticalAlignment="Top" BorderBrush="Black" BorderThickness="2">
>                                         <ScrollViewer
> VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"
> HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
>                                           <WrapPanel Background="LightBlue"
> Width="200" Height="Auto" Name="wrap1" >
>                                                        ????????????????????
>                                           </WrapPanel>
>                                         </ScrollViewer>
>                                       </Border>
>                                  </ItemsPanelTemplate>
è giusto, cosa c'è che non va?
La lista di prodotti (Value) è l'ItemsSource dell'ItemsControl, questi
vengono disposti con un WrapPanel. L'ItmesPanel serve solo per
determinare come disporre gli elementi, se vuoi customizzare come viene
rapprsentato ogni singolo elemento definisci un template anche per
quello usando ItemsControl.ItemTemplate.



title: Delucidazioni su Wpf

text:
Ciao Romano,
You wrote on 05/05/2011 :
> Nessuno che mi dia una risposta ?
giusto per mettere i puntini sulle i su un newsgroup non esistono
urgenze per quelle ci sono i consulenti a pagamento.



title: Delucidazioni su Wpf

text:
Il 06/05/2011 4:17 PM, Mauro Servienti [MVP] ha scritto:
> Ciao Romano,
>
> You wrote on 05/05/2011 :
>> Nessuno che mi dia una risposta ?
>
> giusto per mettere i puntini sulle i su un newsgroup non esistono
> urgenze per quelle ci sono i consulenti a pagamento.
>
> .m
>
Lungi da me l'idea di richiedere urgenze di qualsiasi tipo.
Richiedevo un pò di aiuto, anche riferimenti a link utili per chiarirmi
meglio le idee.
Thanks


title: Delucidazioni su Wpf

text:
>
> è giusto, cosa c'è che non va?
>
> La lista di prodotti (Value) è l'ItemsSource dell'ItemsControl, questi
> vengono disposti con un WrapPanel. L'ItmesPanel serve solo per
> determinare come disporre gli elementi, se vuoi customizzare come viene
> rapprsentato ogni singolo elemento definisci un template anche per
> quello usando ItemsControl.ItemTemplate.
>
> .m
>
  <ItemsControl ItemsSource="{Binding Value}">
                                 <WrapPanel Background="LightBlue"
Width="200" Height="Auto" Name="wrap1">
                                 </WrapPanel>
                         </ItemsControl>
Il wrapPanel non lo vuole proprio e se lo tolgo è come se mi
visualizzasse il metodo ToString() di della mia classe Prod.
Con il wrapPanel mi compare il seguente messaggio:
WrapPanel' object cannot be added to 'ItemsControl'. Operation is not
valid while ItemsSource is in use. Access and modify elements with
ItemsControl.ItemsSource instead.  Error at object
'System.Windows.Controls.WrapPanel' in markup file
'WpfApplication1;component/window2.xam
C'è qualcosa che mi sfugge:
Non riesce a risalire alla list<Prod> quando gli passo il Binding Value.
Credo che questa parte sia focale per poi capire il resto.
Io penso che molti avranno avuto i miei dubbi quando hanno approcciato
il problema, come sto facendo io.
Thanks e buon lavoro.


title: Delucidazioni su Wpf

text:
Il 09/05/2011 16:13, Romano ha scritto:
> <ItemsControl ItemsSource="{Binding Value}">
> <WrapPanel Background="LightBlue" Width="200" Height="Auto" Name="wrap1">
> </WrapPanel>
>
> </ItemsControl>
come diceva mauro manca la parte che dice come renderizzare il singolo
item, cioè serve un itemtemplate.
guardando qui:
http://stackoverflow.com/questions/1832719/wpf-itemspaneltemplate-not-working
anche se usa una listbox al posto del più generico itemscontrol puoi
vedere che non devi aggiungere nulla, all'interno del tag "wrappanel",
in più di quanto hai scritto, ma a parte devi dichiarare una cosa tipo:
<Itemscontrol.ItemTemplate>
             <DataTemplate>
                     <Image Source="{Binding Image}"/>
                     <TextBlock Text="{Binding Name}" />
             </DataTemplate>
</Itemscontrol.ItemTemplate>
(ho preso dall'articolo, guarda lì e estrapola, io non ho potuto fare
una prova, spero che funzioni. Se ci sono ancora problemi fammi sapere)


title: Delucidazioni su Wpf

text:
> come diceva mauro manca la parte che dice come renderizzare il singolo
> item, cioè serve un itemtemplate.
Ho inserito la seguente ma niente: Manca sempre l'informazione di come
renderizzare i miei oggetti.
<ItemsControl.ItemTemplate>
             <DataTemplate>
                  <TextBlock Text="{Binding Prod.Name}" />
             </DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Per comodità ti invio l'oggetto che passo:
//create all
             Cat ct = new Cat { NameCat = "cat1" };
             List<Prod> listA = new List<Prod>();
             listA.Add(new Prod { Name = "pA1", Categ = ct });
             listA.Add(new Prod { Name = "pA2", Categ = ct });
             listA.Add(new Prod { Name = "pA3", Categ = ct });
             List<Prod> listB = new List<Prod>();
             listB.Add(new Prod { Name = "pB1" });
             listB.Add(new Prod { Name = "pB2" });
             listB.Add(new Prod { Name = "pB3" });
             listB.Add(new Prod { Name = "pB4" });
             listB.Add(new Prod { Name = "pB5" });
             listB.Add(new Prod { Name = "pB6" });
             List<Prod> listC = new List<Prod>();
             listC.Add(new Prod { Name = "pC1" });
             Dictionary<string, List<Prod>> dati = new
Dictionary<string, List<Prod>>();
             dati.Add("A", listA);
             dati.Add("B", listB);
             dati.Add("C", listC);
             TheTabControl.ItemsSource = dati;


title: Delucidazioni su Wpf

text:
Il 09/05/2011 17:55, Romano ha scritto:
>
>> come diceva mauro manca la parte che dice come renderizzare il singolo
>> item, cioè serve un itemtemplate.
>
>
> Ho inserito la seguente ma niente: Manca sempre l'informazione di come
> renderizzare i miei oggetti.
>
> <ItemsControl.ItemTemplate>
> <DataTemplate>
> <TextBlock Text="{Binding Prod.Name}" />
> </DataTemplate>
> </ItemsControl.ItemTemplate>
> </ItemsControl>
stai controllando se il binding va a buon fine? (tramite output window o
converter o snoop o wpfinspector?)
allo scopo ecco qualche link:
http://bea.stollnitz.com/blog/?p=52
http://snoopwpf.codeplex.com/
http://www.wpftutorial.net/Inspector.html
probabilmente devi bindare a {Binding Prod/Name} o qualcosa di simile,
ecco un altro link:
http://www.nbdtech.com/Free/WpfBinding.pdf


title: Delucidazioni su Wpf

text:
Ciao Romano,

come ti ha fatto vedere Marco, e detto io in precedenza, la soluzione è
tutta nell'ItemTemplate dell'ItemsControl. Il WrapPanel serve solo ed
esclusivamente come pannello per hostare gli elementi che vengono
generati offrendoti una flessibilità che non ha eguali.



title: Delucidazioni su Wpf

text:

Grazie Marco dell'interessamento.Darò un'occhiata ai Link.
Spero di capirci di più del Wpf perchè lo vedo molto utile ed è per
questo che sto sbattendo la testa sull'argomento cercandone di
focalizzare la sua logica.


title: Delucidazioni su Wpf

text:
>
> come ti ha fatto vedere Marco, e detto io in precedenza, la soluzione è
> tutta nell'ItemTemplate dell'ItemsControl. Il WrapPanel serve solo ed
> esclusivamente come pannello per hostare gli elementi che vengono
> generati offrendoti una flessibilità che non ha eguali.
>
> .m
>
Grazie Mauro,
Il fatto è che ho la sensazione che mi manchi un piccolo tassello per
focalizzare tutta la questione del binding su oggetti + o - complessi
personalizzati e comincio ad avere la frenesia di ricercare questo
tassello: Non so se ti capita anche a te.
Comunque grazie tanto.


title: Delucidazioni su Wpf

text:
Ciao Romano,
You wrote on 09/05/2011 :
>> come diceva mauro manca la parte che dice come renderizzare il singolo
>> item, cioè serve un itemtemplate.
>
>
> Ho inserito la seguente ma niente: Manca sempre l'informazione di come
> renderizzare i miei oggetti.
>
> <ItemsControl.ItemTemplate>
>              <DataTemplate>
>                   <TextBlock Text="{Binding Prod.Name}" />
>              </DataTemplate>
> </ItemsControl.ItemTemplate>
> </ItemsControl>
>
cosa è Prod.Name? o meglio che cosa è Prod?
>              Cat ct = new Cat { NameCat = "cat1" };
>
>
>              List<Prod> listA = new List<Prod>();
>              listA.Add(new Prod { Name = "pA1", Categ = ct });
>              listA.Add(new Prod { Name = "pA2", Categ = ct });
>              listA.Add(new Prod { Name = "pA3", Categ = ct });
>
>              List<Prod> listB = new List<Prod>();
>              listB.Add(new Prod { Name = "pB1" });
>              listB.Add(new Prod { Name = "pB2" });
>              listB.Add(new Prod { Name = "pB3" });
>              listB.Add(new Prod { Name = "pB4" });
>              listB.Add(new Prod { Name = "pB5" });
>              listB.Add(new Prod { Name = "pB6" });
>
>              List<Prod> listC = new List<Prod>();
>              listC.Add(new Prod { Name = "pC1" });
>
>
>              Dictionary<string, List<Prod>> dati = new Dictionary<string,
> List<Prod>>();
>              dati.Add("A", listA);
>              dati.Add("B", listB);
>              dati.Add("C", listC);
>
>              TheTabControl.ItemsSource = dati;
chiaro, ho provato, è il TabControl che ha un comportamento tutto suo:
<TabControl x:Name="myTabControl">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=Key, StringFormat=Categoria:
{0}}" />
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <ItemsControl ItemsSource="{Binding Path=Value}">
                <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <WrapPanel />
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Margin="5" Text="{Binding Path=Name,
StringFormat=Prodotto: {0}}" />
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>



title: Delucidazioni su Wpf

text:

Grazie.
Funziona.
Adesso cerco di capirne la logica.
Molte Grazie.


title: Entity Framework vs NHibernate

author: Stefano Paparesta

text:
Ciao a tutti, ho bisogno di una conferma, un consiglio.
Ad oggi uso NHIbernate, vorrei iniziare ad introdurre nei miei progetti EF.
La domanda EF funziona bene, lo utilizzate con successo nelle vostre applicazioni ?
Non mi interessa tanto un confronto secco tra i due prodotti, sono diversi e penso Nhibernate sia più maturo, ma mi piace l'idea di usare un qualcosa di più integrato con VS.
Cosa ne pensate ?

Grazie
Stefano


title: Entity Framework vs NHibernate

author: Julio Di Egidio

text:
"Stefano Paparesta" <
paparest...@gmail.com
> wrote in message
news:1f32eddd-dc5c-4e90...@googlegroups.com...

My 2c:  Ci sono indubbiamente tutti i vantaggi di un componente direttamente
supportato, nonche' il fatto, per quello che vedo dagli annunci di lavoro,
che molti di quelli che usano l'
ASP.NET
 MVC lo abbinano appunto a EF, mentre
di richieste per NHibernate ne vedo piuttosto poche, giusto in certe
nicchie.  Poi al livello tecnico ci sono sempre pro e contro da entrambe le
parti: non ne so molto di prima mano (non uso O/RM), ma so che per esempio
NHibernate e' piu' potente ma anche parecchio piu' complesso di EF, d'altra
parte (sempre per il poco che ne ho letto o visto) con NHibernate piu' o
meno "ci fai tutto", mentre lo stesso (ancora?) non e' per EF.

Julio


title: Entity Framework vs NHibernate

text:
Ciao Stefano Paparesta,

guarda se trovi qualche spunto interessante:
http://weblogs.asp.net/ricardoperes/archive/2013/05/29/the-state-of-entity-framework-and-nhibernate.aspx

> Grazie
> Stefano

.m

--
blog @ //
milestone.topics.it


title: Entity Framework vs NHibernate

text:
Grazie a tutti e due.

LuduvicoVan non li usa, io mi sto "allontanando". Forse per ciò che faccio io non è poi così fondamentale usarli. Quello che scrive nel post che mi hai consigliato tu Mauro io lo sento tanto. Tanta fatica per usare Nhibernate in certe di situazioni, trovare info non è poi così semplice per certe sue features. Penso che in effetti si senti proprio la mancanza di una linea. Poi per carità lo so che su certe cose "spacca".
A volte ho l'impressione di sovraingegnerizzare il mio lavoro. Ripeto i progetti su cui lavoro non sono enormi per cui forse non era proprio proprio corretto fin da l'inizio l'uso di un oggetto del genere.
Ho lasciato passare un po' di versioni, avevo paura di un prodotto tipo LinqToSql, invece vedo che si danno molto da fare e prob. per cosa devo fare io va più che bene EF.
Ma non ho capito una cosa Mauro, tu che li usi gli ORM che cosa preferisci ?

Grazie Stefano


title: Entity Framework vs NHibernate

text:
Ciao Stefano,

You wrote on 30/05/2013 :
> Ma non ho capito una cosa Mauro, tu che li usi gli ORM che cosa preferisci ?

ho smesso e mi sono disintossicato? :-)
Ho capito che l'ORM ï¿œ uno dei problemi e spesso introduce piï¿œ frizione
di quella che cerca di togliere, ï¿œ un discorso molto e articolato sia
chiaro difficile da fare in un post, considera che in azienda ne
facciamo un corso di 2 giorni per intodurre la povera vittima dell'ORM
ai concetti di DDD e CQRS in particolare dove non butti via l'ORM (se
usi un db relazionale) ma ti limiti ad usarlo per fare quello che sa
fare bene, mapping e impedence mismatch, fine dei giochi.



title: Entity Framework vs NHibernate

author: Giulio Petrucci

text:
Ciao Stefano,

Premesso che ho usato EF solo per un progetto, dico che secondo me NH
vince su tutta la linea per una serie di motivi, che vado tosto ad elencare.
Personalmente ho difficoltà con gli strumenti in cui non ho il "pieno
controllo" e con EF, interfacce grafiche, ecc. le vedo solo come un
appesantimento. In secondo luogo, i modelli generati da EF sono
appesantiti da un sacco di roba di cui ancora non capisco il senso. E'
vero che AFAIK hanno introdotto anche code first, POCO, ecc., ma per
quando se ne erano accorti, mi ero già skillato (più o meno... :-)) su
NH. Che invece è *SEMPLICE*: se hai bisogno di X, fai X. E non X, Y, Z, ecc.

NH ha (a mio avviso) un difetto tecnico che è una relativa "debolezza"
del provider LINQ (ma anche quello di EF è un po' debole) e qualche
problema (es: le subquery non si basano su join ma solo su subselect), e
pure un difetto "gestionale": non ha un nome che spinge lo sviluppo, le
roadmap, ecc.
Ma all'attuale stato delle cose, come dicevo, uso sempre NH.

Detto questo, ha *STRA*-ragione Mauro quando dice che l'ORM risolve i
problemi quando gli si chiede di fare quello per cui è stato fatto. :-)

Ciao,
Giulio

--


title: MSBuild: definire costanti

text:
Ciao a tutti,
ho capito che per definire la modalità di compilazione per il mio
progetto basta che faccio:
 >>> MSBuild.exe MyProject.proj /p:Configuration=Debug
Ora, nel mio codice ho un paio di sezioni del tipo #if MIA_COSTANTE. E'
possibile definire una cosa del genere compilando da riga di comando con
MSBuild.exe? Potete linkarmi a qualche buona risorsa a riguardo?
Grazie,
Giulio
--


title: MSBuild: definire costanti

text:


Per esempio (provato su un progetto .csproj, ma non dovrebbe fare
differenza):
    MSBuild /p:DefineConstants=TRACE;DEBUG;MIA_COSTANTE ...ecc...
Nota che lo switch /property *sovrascrive* la corrispondente
proprieta' di progetto.
Documentazione la trovi qui e dintorni:
http://msdn.microsoft.com/en-us/library/bb629394.aspx
-LV


title: CORSO DI PERFEZIONAMENTO COMPUTER FORENSICS

author: Dr Dimalta

text:
Siamo lieti di annunciarVi l’apertura delle iscrizioni alla quarta
edizione del Corso di Perfezionamento in “Computer forensics e
investigazioni digitali” dell’Università degli Studi di Milano.
Al seguente indirizzo potete reperire tutte le informazioni
necessarie.
http://forensics.typepad.com/


title: Roslyn: ne esiste una versione standalone?

text:
Come da oggeto. :-)

Grazie,
Giulio

--


author: Mauro Servienti [MVP]

text:
Ciao Giulio,

You wrote on 28/10/2011 :
> Come da oggeto. :-)

no, ma non capisco la domanda :-)

> Grazie,
> Giulio

.m

--
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCTS
http://mvp.support.microsoft.com/profile/mauro

blog @
http://milestone.topics.it

whynot [ at ] topics [ dot ] it


text:
Ciao Mauro,

On 29/10/2011 09:34, Mauro Servienti [MVP] wrote:
> no, ma non capisco la domanda :-)

Vado a spiegare. :-)
Alla pagina di donwload [1] viene esplicitamente richiesta una versione
di VisualStudio che non sia la Express, cioè quella che ho io. Fermo
restando che per quello che mi serve lavorerei con la finestra
interattiva e basta, mi chiedo: posso comunque installarlo come
applicazione "standalone"?

Ciao,
Giulio

_____
[1]
http://www.microsoft.com/download/en/details.aspx?id=27746


text:
Ciao Giulio,

You wrote on 31/10/2011 :
> Alla pagina di donwload [1] viene esplicitamente richiesta una versione di
> VisualStudio che non sia la Express, cioè quella che ho io. Fermo restando
> che per quello che mi serve lavorerei con la finestra interattiva e basta, mi
> chiedo: posso comunque installarlo come applicazione "standalone"?

ok, chiaro.
No ad oggi no, *credo* che la limitazione sulla Express sia solo legata
alla CTP.



title: MVVM: due view sullo stesso view model?

text:
Ciao a tutti,
vi spiego il mio (ipotetico) scenario con una storiella. :-) Sono uno
sviluppatore e sto lavorando a una versione estremamente "light" di
visual studio in WPF: solo il Solution Explorer e l'Editor. Devo fare in
modo che quando dal solution explorer rinomino il file Pippo.cs in
Pluto.cs, anche la classe "Pippo" dichiarata nel file sia rinominata in
Pluto.
A livello di modello ho che:
class ClassFile
{
	string ClassName { ... }
	string Code { ... }
}
mi chiedo:
1. è giusto tenere la visualizzazione sincronizzata usando LO STESSO
VIEW MODEL per entrambe le view (l'editor che visualizza ClassFile.Code
e il solution explorer che visualizza ClassFile.ClassName)?
2. in alternativa, devo far implementare INotifyPropertyChanged al mio
oggettod i dominio? (e la cosa mi romperebbe alquanto perché MVVM è
bello anche perché il dominio non si "sporca" con queste cose)?
3. in alternativa, uso un message broker e tutti i VM che insistono su
una entità registrano un evento EntityChanged?
4. (altre soluzioni?)
Grazie in anticipo e buona settimana,
Giulio
--


title: MVVM: due view sullo stesso view model?

author: Corrado Cavalli [MVP]

text:
Giulio Petrucci expressed precisely :
> Ciao a tutti,
>
> vi spiego il mio (ipotetico) scenario con una storiella. :-) Sono uno
> sviluppatore e sto lavorando a una versione estremamente "light" di visual
> studio in WPF: solo il Solution Explorer e l'Editor. Devo fare in modo che
> quando dal solution explorer rinomino il file Pippo.cs in Pluto.cs, anche la
> classe "Pippo" dichiarata nel file sia rinominata in Pluto.
>
> A livello di modello ho che:
>
> class ClassFile
> {
> 	string ClassName { ... }
> 	string Code { ... }
> }
>
> mi chiedo:
>
> 1. ï¿œ giusto tenere la visualizzazione sincronizzata usando LO STESSO VIEW
> MODEL per entrambe le view (l'editor che visualizza ClassFile.Code e il
> solution explorer che visualizza ClassFile.ClassName)?
> 2. in alternativa, devo far implementare INotifyPropertyChanged al mio
> oggettod i dominio? (e la cosa mi romperebbe alquanto perchï¿œ MVVM ï¿œ bello
> anche perchï¿œ il dominio non si "sporca" con queste cose)?
> 3. in alternativa, uso un message broker e tutti i VM che insistono su una
> entitï¿œ registrano un evento EntityChanged?
> 4. (altre soluzioni?)
>
> Grazie in anticipo e buona settimana,
> Giulio
Se le view sono diverse usare lo stesso ViewModel potrebbe portare ad
avere delle duplicazioni, personalmente tendo ad avere 1 View= 1
ViewModel. Se non vuoi "sporcare" il dominio con INPC "wrappa" l'entitï¿œ
in un altrï¿œ entitï¿œ locale che la implementa(se vuoi chiamala anche
ViewModel) e condividi questa tra i due ViewModel (explorer e code) in
questo modo la view ï¿œ sincronizzata e riduci al minimo le duplicazioni.
Come sempre "la soluzione" non esiste, semmai ne esiste una che meglio
si adatta allo scenario che vuoi realizzare.
HTH


title: MVVM: due view sullo stesso view model?

text:
Il 27/06/2011 16:42, Giulio Petrucci ha scritto:
[...]
> 1. è giusto tenere la visualizzazione sincronizzata usando LO STESSO
> VIEW MODEL per entrambe le view (l'editor che visualizza ClassFile.Code
> e il solution explorer che visualizza ClassFile.ClassName)?
> 2. in alternativa, devo far implementare INotifyPropertyChanged al mio
> oggettod i dominio? (e la cosa mi romperebbe alquanto perché MVVM è
> bello anche perché il dominio non si "sporca" con queste cose)?
> 3. in alternativa, uso un message broker e tutti i VM che insistono su
> una entità registrano un evento EntityChanged?
> 4. (altre soluzioni?)
non sapevo se girarmi e dirtelo a voce, ma usare il newsgroup è
senz'altro molto più "nerd"...
Se può essere un esempio valido, ho visto che nel mondo mvvm la tendenza
è sempre quella di avere un viewmodel per ogni view, anzi, capita (a me
spesso) di avere più viewmodel per view nel caso in cui per esempio
visualizzi oggetti o gruppi di oggetti eterogenei in una stessa view
(pensa alle mie treeview...).
Ho visto che MVVMLight utilizza una versione di OnPropertyChanged
(chiamata lì RaisePropertyChanged) che include un "sollevamento" normale
dell'evento PropertyChanged e una chiamata al Messenger (incluso) che fa
broadcast della variazione della property per tutti gli interessati
(dunque qualunque viewmodel interessato).
My 2 cents (poi mi giro e me li ridai eh!)


title: MVVM: due view sullo stesso view model?

text:
Ciao Giulio,
You wrote on 27/06/2011 :
> 1. ï¿œ giusto tenere la visualizzazione sincronizzata usando LO STESSO VIEW
> MODEL per entrambe le view (l'editor che visualizza ClassFile.Code e il
> solution explorer che visualizza ClassFile.ClassName)?
broker.
> 2. in alternativa, devo far implementare INotifyPropertyChanged al mio
> oggettod i dominio? (e la cosa mi romperebbe alquanto perchï¿œ MVVM ï¿œ bello
> anche perchï¿œ il dominio non si "sporca" con queste cose)?
Sacrilegio :-)
Il dominio ï¿œ il dominio e mi facci il dominio :-)
Come dice Corrado wrappa e se vuoi scrocca da Radical
(
http://radical.codeplex.com
) tutti gli automatismi del mondo per
wrappare con semplicitï¿œ, in Radical c'ï¿œ una cosa che ti potrebbe
interessare: Radical.Design che parte con uno scopo diverso ma potrebbe
darti qualche idea:
http://milestone.topics.it/blog/post/design-time-data-reloaded
http://milestone.topics.it/blog/post/wrappa-che-ti-passa-how-to-in-salsa-tdd
Quello che ti "interessa" ï¿œ quel Wrapper<T> del secondo post :-)
> 3. in alternativa, uso un message broker e tutti i VM che insistono su una
> entitï¿œ registrano un evento EntityChanged?
amen
> 4. (altre soluzioni?)
baracchino in spiaggia? voi venite a suonare e i ci metto le bibite e i
panini? :-)
.m
--
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCTS
http://mvp.support.microsoft.com/profile/mauro
blog @
http://milestone.topics.it
whynot [ at ] topics [ dot ] it