2010-04-16 16 views

risposta

16

Puoi use a TypeConverter se siete in grado e disposti a decorare la proprietà origine dati con un attributo personalizzato.

In caso contrario, è necessario allegare agli eventi Parse e Format di un oggetto Binding. Questo, sfortunatamente, elimina l'utilizzo del designer per l'associazione per tutti gli scenari tranne quelli più semplici.

Per esempio, diciamo che si voleva un TextBox legato ad una colonna intero che rappresenta chilometri e si voleva la rappresentazione visiva in miglia:

Nel costruttore:

Binding bind = new Binding("Text", source, "PropertyName"); 

bind.Format += bind_Format; 
bind.Parse += bind_Parse; 

textBox.DataBindings.Add(bind); 

...

void bind_Format(object sender, ConvertEventArgs e) 
{ 
    int km = (int)e.Value; 

    e.Value = ConvertKMToMiles(km).ToString(); 
} 

void bind_Parse(object sender, ConvertEventArgs e) 
{ 
    int miles = int.Parse((string)e.Value); 

    e.Value = ConvertMilesToKM(miles); 
} 
+1

Vale la pena ricordare che questa tecnica coprirà solo gli scenari in cui gli oggetti Binding vengono utilizzati ed esposti. Non funzionerà con griglie e altri controlli di rilegatura complessi, a meno che, ovviamente, non dispongano della propria API Format/Parse. Pertanto, sfortunatamente non esiste un modo "generico" di utilizzare convertitori di valore all'interno dei meccanismi di associazione dei dati di WinForms. – Crono

5

Un'altra opzione è quella di avere un ViewModel specifico per la forma che espone i dati nel formato che vi serve per visualizzare sul modulo. Si può facilmente raggiungere esso utilizzando AutoMapper e costruire il proprio Formatter.

In questo modo si avrà il pieno supporto per il progettista troppo.

Problemi correlati