Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Binding - problema elementare
Forum - C# / VB.NET - Binding - problema elementare

Avatar
mg (Normal User)
Rookie


Messaggi: 39
Iscritto: 19/11/2009

Segnala al moderatore
Postato alle 12:08
Giovedì, 29/04/2010
Apro ancora questa discussione e poi non disturbo per un po'...
Ho collegato con binding una casella testo con la coordinata Y2 di una linea in modo tale che modificando la casella testo si aggiorna automaticamente la posizione della linea. Ho scritto quanto segue

Codice sorgente - presumibilmente C++

  1. Line l1 = new Line();
  2.         Binding bl1 = new Binding();
  3.        
  4.         public Window1()
  5.         {
  6.             InitializeComponent();
  7.            
  8.             bl1.Source = textBox3;    // stabilisco la sorgente del binding      
  9.             bl1.Path = new PropertyPath("Text"); // specifico la prop. della sorgente
  10.             bl1.Mode = BindingMode.TwoWay;        // specifico il tipo di binding  
  11.             l1.SetBinding(Line.Y2Property, bl1);  // imposto l'oggetto a cui si collega il binding specificandone la sua proprietà
  12.  
  13.         } ....



vorrei poter impostare che la proprietà Y2 della linea non coincida esattamente con la proprietà text ma ad esempio sia il valore della proprietà text + 100 .

E' possibile farlo?

grazie
MArco

PM Quote
Avatar
mg (Normal User)
Rookie


Messaggi: 39
Iscritto: 19/11/2009

Segnala al moderatore
Postato alle 18:29
Giovedì, 29/04/2010
Potete dirmi se usando un Converter posso ottenere quanto chiesto, oppure esiste un modo molto più semplice, oppure anche con il Converter non è possibile farlo.

Grazie mille

MArco

p.s. il mio obiettivo è quello (semplificando il concetto) di far disegnare un rettangolo inserendo tramite due textbox base ed altezza e legare con il binding le textbox ai vertici del rettangolo. Poichè però inserisco delle lunghezze come input e a me servono le coordinate devo eseguire delle operazioni per estrapolare dalle lunghezze e fissato un origine le coordinate. Un approccio con il binding non è forse corretto per questo problema?

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 20:28
Giovedì, 29/04/2010
Ci sarà sicuramente un modo per fare questo nel binding, ma a dir la verità non lo conosco. Potresti comunque modificare il codice della proprietà Y di Line (Line non è una classe predefinita, perciò presumo che l'abbia scritta tu) per aggiungere 100 al valore passato.

PM Quote
Avatar
mg (Normal User)
Rookie


Messaggi: 39
Iscritto: 19/11/2009

Segnala al moderatore
Postato alle 9:03
Venerdì, 30/04/2010
grazie della risposta Totem.

Line è una classe di System.Windows.Shapes. Disegna semplicemente una linea e ha proprietà x1 y1 x2 y2.

Ho visto che è possibile modificare il binding source <--> target inserendo un Converter. Che dite, è questa la strada giusta o è possibile fare il tutto in modo molto più semplice?

grazie ancora



PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 11:34
Venerdì, 30/04/2010
Se si tratta di un converter, poi guardare qui:
http://totem.altervista.org/guida/versione3/B19%20-%20Prop ...
In quel capitolo ho usato un converter per visualizzare un tipo complesso in una propertygrid. Dovrebbe essere la stessa cosa.

PM Quote
Avatar
mg (Normal User)
Rookie


Messaggi: 39
Iscritto: 19/11/2009

Segnala al moderatore
Postato alle 15:10
Venerdì, 30/04/2010
grazie Totem

così funziona anche se è da migliorare

Codice sorgente - presumibilmente C#

  1. public class MGConverterA : IValueConverter
  2.     {
  3.        
  4.         public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  5.         {
  6.             string vals = value as string;
  7.             double vald = double.Parse(vals);
  8.             vald = vald + 100;
  9.             return vald.ToString();
  10.            
  11.  
  12.         }
  13.         public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  14.         {
  15.             return DependencyProperty.UnsetValue;
  16.         }
  17.     }



avendo inserito tra le risorse
Codice sorgente - presumibilmente Plain Text

  1. <local:MGConverterA x:Key="MGConverter" />



e tra i namespace xml
Codice sorgente - presumibilmente Plain Text

  1. xmlns:local="clr-namespace:Disegna"


essendo disegna il nome namespace in cui si trova la classe  MGConverterA.

ed inserendo il binding come di seguito
Codice sorgente - presumibilmente Plain Text

  1. <Line X1="0" Y1="0" X2="200" Y2="{Binding Path=Text, ElementName=textBox3, Mode=OneWay, Converter={StaticResource MGConverter}}" Name="ln2" Stroke="Red" />



PM Quote