Nun, zuerst die guten/schlechten Nachrichten: die ListView
würde Ihnen erlauben, eine bindbare Gruppe von Tags zu präsentieren, aber leider unterstützt es derzeit keine Horizontal
Ausrichtung, so dass es Ihre Bedürfnisse nicht erfüllen würde.
Das nächste wäre am besten, was ein horizontales StackLayout
innerhalb eineine ScrollView
enthalten sein:
<ScrollView Orientation="Horizontal">
<StackLayout x:Key="tags" Orientation="Horizontal">
</StackLayout>
</ScrollView>
Und bevölkert, dass StackLayout mit Daten aus dem Ansichtsmodell, wenn der Bindungskontext oder dass Eigenschaftsänderungen. Im folgenden Beispiel wird das StackLayout mit Label
Ansichten gefüllt, die mit einem Stil namens "TagStyleName" formatiert sind.
// Note: If this code doesn't work, someone else wrote it.
protected override OnBindingContextChanged() {
var vm = this.BindingContext as MyViewModelClass;
if (vm == null) return;
vm.PropertyChanged += (o, e) => {
if (e.PropertyName == "Tags") {
WatchTagsForChanges();
RefreshTags();
}
};
}
private void WatchTagsForChanges() {
var vm = this.BindingContext as MyViewModelClass;
if (vm == null) return;
vm.Tags.CollectionChanged += (o, e) => RefreshTags();
}
private void RefreshTags() {
var vm = this.BindingContext as MyViewModelClass;
if (vm == null) return;
this.tags.Children.Clear()
foreach (var tag in vm.Tags) {
this.tags.Children.Add(new Label{ Text = tag, Style = "TagStyleName" }));
}
}
kann jeder Ansicht eine globale Variable haben "Tittle" oder "Tag" genannt und Sie diese in den gesamten Code zugreifen kann: 'public string Tag1 = "Tag 1";' –