agosto 2007 Blog Posts
Ieri mi sono imbattuto in un altra "stranezza" di VB9: mettiamo a confronto lo stesso codice C#3.0 vs VB9 C#3.0 VB9 Come potete "ammirare" è apparso un fantomatico overload (index As Integer) as Char.In realtà l'overload non esiste ma è l'intellisense che, considerato che VB permette di invocare metodi senza usare le parentesi, decide di visualizzare l'indexer di string.In realtà già VB2005 permette di scrivere: 1: Dim o As Object = "ciao" 2: Dim c As Char = o.ToString(1)
ma non apparendo nell'intellisense il "danno" era limitato.Può essere che nella RTM questa "novità" venga...
Come sapete ad uno style è possibile associare un trigger, l'esempio che segue, ad esempio, cambia il colore di sfondo della textbox quando questa ha il focus.
1: <Style TargetType="{x:Type TextBox}">
2: <Setter Property="FontFamily" Value="Tahoma" />
3: <Setter Property="Margin" Value="10" />
4: <Style.Triggers>
5: <Trigger Property="IsFocused" Value="True">
6: <Setter Property="Background" Value="LightGreen" />
7: </Trigger>
8: </Style.Triggers>
9: </Style>
A questo punto la domanda è: Come faccio a impostare un trigger con una condizione che...
INotifyPropertyChanged è ormai di casa per chi usa databinding sopratutto per chi lo fa con WPF, con LINQ è in arrivo un altra interfaccia denominata INotifyPropertyChanging.
Mentre la prima ha lo scopo di informare il motore di binding che una determinata proprietà è stata modificata e che quindi l'eventuale controllo ad essa bindato deve essere aggiornato, la seconda serve per ottimizzare il meccanismo di change tracking implementato da LINQ per determinare se un entità è stata modificata e quindi inviare il comando SQL di aggiornamento quando invochiamo DataContext.SubmitChanges().
In assenza di questa interfaccia quando recuperiamo delle entities via DataContext come nell'esempio che segue:
...
Prendete questo frammento di XAML generato da Cider, a questo punto vi chiedo: Se premo btn che succede?
1: <Grid> 2: <Button Name="btn">Button</Button> 3: </Grid>La risposta è "dipende" se il progetto è VB9 allora potrebbe essere eseguito dell'eventuale codice perchè il default handler generato è dichiarato in questo modo:
1: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click 2: ... 3: End Sub
Ovviamente C# genera questo XAML:
...