protected virtual void On_evento_p_modificata(DatiPEventArgs e)
 {
     if (evento_p_modificata != null) evento_p_modificata(this, e);
 }
        private void OkButtonClick(object sender, RoutedEventArgs e)
        {
            if (modalità_modifica == false)
                db_connection.persona.Add(p_binding_source);

            // Si controlla se tutti i dati obbligatori di una persona siano presenti
            if (!p_binding_source.IsValid)
            {
                MessageBox.Show("Uno o più dati anagrafici della persona sono mancanti.");
                return;
            }

            if (reati_binding_source.Find(item => item.IsSelected == true) == null)
            {
                {
                    MessageBox.Show("Attenzione, non è stato associato alcun reato alla persona.");
                    return;
                }
            }

            // Si impostano alcuni campi della persona, a seconda delle selezioni dell'utente
            if (sessoMRadioButton.IsChecked == true) p_binding_source.Sesso = "M";
            else p_binding_source.Sesso = "F";

            DatiPEventArgs event_data;
            if (modalità_modifica) event_data = new DatiPEventArgs(p_binding_source, p_originale);
            else event_data = new DatiPEventArgs(p_binding_source);

            p_binding_source.PersonaReato.Clear();
            foreach (PersonaReati pr in reati_binding_source)
            {
                if (pr.IsSelected == true)
                {
                    Model.PersonaReato nuovo_pr = new Model.PersonaReato();
                    nuovo_pr.scheda = scheda;
                    nuovo_pr.persona = p_binding_source;
                    nuovo_pr.reato = pr.Reato;
                    p_binding_source.PersonaReato.Add(nuovo_pr);
                }
            }
            db_connection.SaveChanges();

            // Se si è in modalità modifica si invoca l'evento persona modificata,
            // Altrimenti si invoca l'evento persona creata
            if (modalità_modifica)
                On_evento_p_modificata(event_data);
            else
                On_evento_p_creata(event_data);
            Close();
        }
        void PersonaModificataHandler(object sender, DatiPEventArgs dati_evento)
        {
            // Si aggiorna l'elenco delle persone
            persona_binding_source.Clear();
            db_connection = new Model.novus_daedalus_dbEntities();
            scheda = db_connection.scheda.Find((int)Application.Current.Properties["Scheda"]);

            foreach (Model.persona p in scheda.persona)
            {
                if (p.Ruolo != "Difensore")
                    persona_binding_source.Add(p);
            }
            personaDataGrid.SelectedItem = persona_binding_source.Find(item => item.Id == dati_evento.Nuova_persona.Id);
            personaDataGrid.Items.Refresh();
        }