8 messaggi dal 07 marzo 2016
ciao a tutti
anticipando che sono un principiante volevo chiedervi un consiglio:
sto cercando di creare una UserControl wpf dove lascio al utente la possibilità di aggiungere ed eliminare runtime dei controlli (textbox e bottoni)tutto questo dal code behind.
per quanto riguarda la creazione degli oggi non ho problemi ma non riesco ad eliminare gli oggetti.
l'idea era quella di utilizzare l'evento click dei bottoni creati per eliminare le textbox ma quando vado a scrivere il codice le textbox ancora non esistono,avete consigli?
grazie anticipatamente.
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Manuel e benvenuto!
Puoi arrivare alle textbox passando dal bottone che ha scatenato l'evento click.
Infatti, la funzione che gestisce l'evento click del bottone di solito è fatta così:
private void Bottone_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)

Il parametro sender che ti viene passato conterrà il riferimento al bottone. Ti basta fare un casting a Button.
var button = sender as Button;

Ora che hai il riferimento al bottone sei a cavallo: ti basterà risalire l'albero di controlli fino ad arrivare ad un contenitore comune del bottone e della textbox, ed eliminarlo.

Qui c'è un esempio in cui al posto di un bottone viene usata una Image, ma il concetto è lo stesso:
https://social.msdn.microsoft.com/Forums/vstudio/en-US/0bfea9d6-2ca3-46ea-8c70-b056be873bbb/wpf-retrieve-list-of-sibling-controls-within-same-datatemplate-from-eventhandler?forum=wpf#answers

...però questo intero approccio è sbagliato in WPF. Creare controlli a runtime era una possibilità di Winforms che ora è diventata desueta grazie alle superiori capacità di databinding di WPF.
Un modo più corretto sarebbe quello di creare un ViewModel (una classe) ed assegnarla al DataContext della finestra. Quando vuoi aggiungere o modificare, lo farai nei confronti di una List<TuaClasse> contenuta nel ViewModel e che rappresenta il tuo elenco logico di elementi. Poi, la Window provvederà a presentare quella lista con delle textbox o altri controlli appropriati.
Questo è un approccio migliore perché nel momento in cui devi salvare nel database la lista di oggetti creati, ti basterà andare a leggere la lista e non dovrai interessarti minimamente della gerarchia di controlli contenuti nella finestra.

La funzionalità di databinding di WPF è molto potente ma può anche essere frustrante impararla ad usare da soli. Procurati un libro o cerca delle risorse online. Sarà tempo ottimamente investito e necessario alla tua crescita come sviluppatore Windows.

ciao,
Moreno
Modificato da BrightSoul il 27 luglio 2016 19.49 -

Enjoy learning and just keep making
11.886 messaggi dal 09 febbraio 2002
Contributi
Qui c'è una demo che ti permette di aggiungere ed eliminare delle voci (nel caso particolare sono i componenti di una famiglia). Ogni voce viene presentata con varie caselle, anche in base al tipo (se il componente è una animale, compare la casella per indicare la razza e se invece è una persona compare il cognome).

https://1drv.ms/u/s!Ao4rhSdtDw8rgZJxEmmRncO4HGlEww

L'aggiunta e l'eliminazione agiscono su una lista presente nel viewmodel, come ti dicevo prima. La finestra si limita a presentare quell'elenco in modo che l'utente possa digitare dei valori.

ciao,
moreno

Enjoy learning and just keep making
8 messaggi dal 07 marzo 2016
Ho seguito i consigli che mi hai detto e sono riuscito a fare quello di cui avevo bisogno.

grazie mille,
manuel

Torna al forum | Feed RSS

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