まず、良い/悪いニュース:ListView
は、バインド可能なタグセットを提示できますが、残念ながら現時点ではHorizontal
の方向はサポートされていません。
次善の策はScrollView
内に含まれる水平StackLayout
次のようになります。
<ScrollView Orientation="Horizontal">
<StackLayout x:Key="tags" Orientation="Horizontal">
</StackLayout>
</ScrollView>
とViewModelにバインドコンテキストまたはそのプロパティの変更からのデータとそのStackLayoutを取り込みます。次の例では、StackLayoutにLabel
のビューを取り込み、 "TagStyleName"という名前のスタイルを使用してスタイリングします。
// 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" }));
}
}
各ビューには、「点画」や「タグ」と呼ばれるグローバル変数を持つことができますし、すべてのコードでこれをアクセスすることができます: 'パブリック文字列タグ1 =「タグ1」;' –