Un linguaggio di programmazione orientato agli oggetti sviluppato da Microsoft che può essere utilizzato in .NET.
Gentile Maurizio,
Per gestire il binding dei controlli di una form Windows Forms in modo che le modifiche vengano applicate solo al momento della conferma (con pulsanti "Salva" e "Annulla"), puoi seguire una delle seguenti strategie:
- Uso di una Classe ViewModel
Puoi creare una classe ViewModel che copia i dati dall'oggetto originale. La form lavora con il ViewModel, e solo quando l'utente preme "Salva" trasferisci i dati dal ViewModel all'oggetto originale.
Passi da seguire:
- Crea una classe ViewModel che rispecchi la struttura dell'oggetto originale.
- Copia i dati dall'oggetto originale al ViewModel al caricamento della form.
- Effettua il binding dei controlli della form alle proprietà del ViewModel.
- Quando l'utente preme "Salva", **copia i dati dal ViewModel all'oggetto originale.
- Se l'utente preme "Annulla", semplicemente chiudi la form senza trasferire i dati.
Esempio:
public class MyObject
{
public string Property1 { get; set; }
public int Property2 { get; set; }
// altre proprietà
}
public class MyViewModel
{
public string Property1 { get; set; }
public int Property2 { get; set; }
// altre proprietà
public void CopyFrom(MyObject source)
{
Property1 = source.Property1;
Property2 = source.Property2;
// copia altre proprietà
}
public void CopyTo(MyObject destination)
{
destination.Property1 = Property1;
destination.Property2 = Property2;
// copia altre proprietà
}
}
Nel form:
public partial class MyForm : Form
{
private MyObject _originalObject;
private MyViewModel _viewModel;
public MyForm(MyObject obj)
{
InitializeComponent();
_originalObject = obj;
_viewModel = new MyViewModel();
_viewModel.CopyFrom(_originalObject);
this.DataContext = _viewModel; // Binding al ViewModel
}
private void btnSalva_Click(object sender, EventArgs e)
{
_viewModel.CopyTo(_originalObject);
this.DialogResult = DialogResult.OK;
this.Close();
}
private void btnAnnulla_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
this.Close();
}
}
- Binding Temporaneo:
Puoi usare il binding temporaneo con un oggetto di backup. Al caricamento della form, crei una copia dell'oggetto e fai il binding a questa copia. Se l'utente conferma, trasferisci i dati dalla copia all'oggetto originale.
Passi da seguire:
- Crea una copia dell'oggetto originale.
- Effettua il binding della form alla copia.
- Se l'utente preme "Salva", trasferisci i dati dalla copia all'oggetto originale.
- Se l'utente preme "Annulla", chiudi la form senza trasferire i dati.
Esempio:
public partial class MyForm : Form
{
private MyObject _originalObject;
private MyObject _tempObject;
public MyForm(MyObject obj)
{
InitializeComponent();
_originalObject = obj;
_tempObject = new MyObject
{
Property1 = _originalObject.Property1,
Property2 = _originalObject.Property2,
// copia altre proprietà
};
this.DataContext = _tempObject; // Binding all'oggetto temporaneo
}
private void btnSalva_Click(object sender, EventArgs e)
{
_originalObject.Property1 = _tempObject.Property1;
_originalObject.Property2 = _tempObject.Property2;
// trasferisci altre proprietà
this.DialogResult = DialogResult.OK;
this.Close();
}
private void btnAnnulla_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
this.Close();
}
}
Considerazioni Finali:
Entrambi gli approcci ti permettono di gestire le modifiche in modo più pulito e mantenere il vantaggio del binding. L'approccio del ViewModel può risultare più strutturato e flessibile, soprattutto in applicazioni più grandi o complesse. L'approccio del binding temporaneo può essere più semplice e diretto in situazioni meno complesse.
Scegli l'approccio che meglio si adatta alle tue esigenze e alla complessità del tuo progetto.
Spero che ti sia stata utile la mia risposta.
Monica.