Ich hätte gerne jeden Buchstaben des Alphabets als Windows Phone PanoramaItem. Bitte akzeptiere es einfach an dieser Stelle. Jeder Buchstabe wird auf verschiedene Arten angezeigt (kursiv, normal, fett, andere Schriftarten ...). Natürlich könnte ich es manuell machen, aber es ist unflexibel. Also habe ich beschlossen, eine einfache Letter-Klasse zu schreiben, die grundsätzlich zwei Zeichen enthält - Groß- und Kleinschreibung eines Buchstabens. Die Idee war, eine Sammlung dieser Buchstaben an das Panorama zu binden (myPano.ItemsSource = collection;). Hier ist die Vorlage:Windows Phone Panorama + Probleme mit der Datenbindung
<DataTemplate
x:Name="LetterTemplate">
<controls:PanoramaItem
Background="Black"
HorizontalAlignment="Stretch"
Name="{Binding Path=UpperCase}"
ManipulationCompleted="A_ManipulationCompleted"
>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.5*"/>
<RowDefinition Height="0.5*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"/>
<ColumnDefinition Width="0.5*"/>
</Grid.ColumnDefinitions>
<StackPanel
Grid.Row="0"
Grid.Column="0"
Orientation="Vertical"
HorizontalAlignment="Stretch">
<TextBlock
Text="{Binding Path=UpperCase}"
Foreground="{StaticResource PhoneAccentBrush}"
HorizontalAlignment="Center"
FontFamily="Segoe WP"
FontSize="100" />
<TextBlock
Text="{Binding Path=UpperCase}"
HorizontalAlignment="Center"
Foreground="White"
FontFamily="Courier New"
FontSize="100" />
</StackPanel>
<StackPanel
Grid.Row="0"
Grid.Column="1"
Orientation="Vertical"
HorizontalAlignment="Stretch">
<TextBlock
Text="{Binding Path=UpperCase}"
Foreground="White"
HorizontalAlignment="Center"
FontFamily="Segoe WP"
FontStyle="Italic"
FontSize="100" />
<TextBlock
Text="{Binding Path=UpperCase}"
HorizontalAlignment="Center"
Foreground="{StaticResource PhoneAccentBrush}"
FontStyle="Italic"
FontFamily="Courier New"
FontSize="100" />
</StackPanel>
<StackPanel
Grid.Row="1"
Grid.Column="0"
Orientation="Vertical"
HorizontalAlignment="Stretch">
<TextBlock
Text="{Binding Path=LowerCase}"
Foreground="{StaticResource PhoneAccentBrush}"
HorizontalAlignment="Center"
FontFamily="Segoe WP"
FontStyle="Italic"
FontSize="100" />
<TextBlock
Text="{Binding Path=LowerCase}"
HorizontalAlignment="Center"
Foreground="White"
FontStyle="Italic"
FontFamily="Courier New"
FontSize="100" />
</StackPanel>
<StackPanel
Grid.Row="1"
Grid.Column="1"
Orientation="Vertical"
HorizontalAlignment="Stretch">
<TextBlock
Text="{Binding Path=LowerCase}"
Foreground="White"
HorizontalAlignment="Center"
FontFamily="Segoe WP"
FontStyle="Italic"
FontSize="100" />
<TextBlock
Text="{Binding Path=LowerCase}"
HorizontalAlignment="Center"
Foreground="{StaticResource PhoneAccentBrush}"
FontStyle="Italic"
FontFamily="Courier New"
FontSize="100" />
</StackPanel>
</Grid>
</controls:PanoramaItem>
Ich weiß, es ist nicht sehr leistungsorientiert, wenn für Windows Phone Programmierung, aber wir es auf diese Weise lassen sich jetzt.
Das Panorama wurde im Konstruktor der Telefonseite mit einer einfachen Schleife gefüllt, die vom Zeichencode 'A' nach 'Z' wandelte, den entsprechenden Buchstaben erzeugte und zur alphabetischen Sammlung hinzufügte. Es funktionierte gut, war aber langsam: Ich musste ca. 3 Sekunden warten, bis es angezeigt wurde, was nicht akzeptabel ist.
Meine erste Lösung dieses Problems bestand darin, die Alphabet-Sammlung auf 5 Buchstaben zu beschränken und 4 davon zu bearbeiten, wenn sich die Auswahl ändert. Ich habe mehrere Ansätze ausprobiert, aber im Grunde besteht mein Problem darin, die PanoramaItems zu aktualisieren, wenn die Änderung passiert ist.
Entfernen und fügen Sie Briefe aus der Sammlung: Zerstört die schönen Übergänge, auf keinen Fall. Veranlassen Sie, dass die Sammlung CollectionChanged auslöst, wenn sich eine Eigenschaft eines enthaltenen Letter ändert: Es wurde wie zuvor versucht. UpdateTarget() of BindingExpression: Die Methode scheint in .NET CE nicht verfügbar.
Vielleicht habe ich etwas übersehen oder nur völlig ungeeignete Ansätze verfolgt. Wie würdest du es machen?
Vielen Dank im Voraus!
wehn, die mehr Informationen zur Verfügung stellen oder eine Frage weiter klären, bitte die ursprüngliche Frage aktualisieren/redigieren, anstatt eine Antwort hinzuzufügen –