毎日寒いですね。。ざわです。
前回から引き続きXAMLのお勉強メモです。
動作環境
・Windows10
・Microsoft Visual Studio Community 2022 Preview 7.0
・Xamarin.Forms
今回試してみたこと
今後使いそうだな、と思う コレクションを表示するビューコントロールを2つ試してみました。
- ListView
- CollectionView
先に実行結果をお見せしますとこんなカンジ。
1.ListView
1) コンテンツページ ListViewPage.xaml に、ListViewコントロールを配置。
<ListView x:Name="lstView"><ListView.ItemTemplate><DataTemplate><ImageCell Text="{Binding Name}"Detail="{Binding Comment}"ImageSource="{Binding Image}"></ImageCell></DataTemplate></ListView.ItemTemplate></ListView>
次に、9~11行目のText、Detail、ImageSourceプロパティにデータバインディングする値を設定していきます。
2) クラス(ここでは demoModelという名前のクラス)にプロパティを定義。
public class demoModel{public string Name { get; set; }public string Comment { get; set; }public string Image { get; set; }}
3) コードビハインド側(ListViewPage.xaml.cs)に、demoModel型のListオブジェクトを生成 & ListViewに表示する値を設定して、そのListを ListViewのItemSourceにセット。
public partial class ListViewPage : ContentPage{public ListViewPage(){InitializeComponent();List<demoModel> list = new List<demoModel>{new demoModel() { Name = "テキスト1", Comment = "コメント1", Image="Number01.png" },new demoModel() { Name = "テキスト2", Comment = "コメント2", Image="Number02.png" },new demoModel() { Name = "テキスト3", Comment = "コメント3", Image="Number03.png" },new demoModel() { Name = "テキスト4", Comment = "コメント4", Image="Number04.png" },new demoModel() { Name = "テキスト5", Comment = "コメント5", Image="Number05.png" }};lstView.ItemsSource = list;}}
4) あと、ListViewの項目をタップしたときのイベントを追加してみます。
ListViewPage.xaml に ItemTapped イベントを追加し、
<ListView x:Name="lstView" ItemTapped="lstView_ItemTapped">
コードビハインド(ListViewPage.xaml.cs)のイベントに、アラートダイアログを表示する処理を追加。
タップした項目のNameとCommentプロパティ値を表示するようにしています。
private void lstView_ItemTapped(object sender, ItemTappedEventArgs e){var item = e.Item as demoModel;DisplayAlert(item.Name, item.Comment, "OK");}
■実行結果
CollectionViewは基本的な使い方はListViewとほぼ同じで、
以下のレイアウトのいずれかを使用することができます。
- Vertical list:新しい項目が追加されると縦に伸びる一列のリスト
- Horizontal list:新しい項目が追加されると水平方向に伸びる一列のリスト
- Vertical grid:新しい項目が追加されると垂直方向に伸びる複数列のグリッド
- Horizontal grid :新しい項目が追加されると水平方向に伸びる複数行のグリッド
1) コンテンツページ CollectionViewPage.xaml に、CollectionViewコントロールを配置。
まずは「Vertical grid」 で試してみます。
<CollectionView x:Name="colView"ItemsLayout="VerticalGrid, 2"><CollectionView.ItemTemplate><DataTemplate><Grid Padding="10"><Grid.RowDefinitions><RowDefinition Height="35" /><RowDefinition Height="35" /></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition Width="70" /><ColumnDefinition Width="80" /></Grid.ColumnDefinitions><Image Grid.RowSpan="2"Source="{Binding Image}"Aspect="AspectFill"HeightRequest="60"WidthRequest="60" /><Label Grid.Column="1"Text="{Binding Name}"FontAttributes="Bold"LineBreakMode="TailTruncation" /><Label Grid.Row="1"Grid.Column="1"Text="{Binding Comment}"LineBreakMode="TailTruncation"FontAttributes="Italic"VerticalOptions="End" /></Grid></DataTemplate></CollectionView.ItemTemplate></CollectionView>
2) ListViewのときと同様に、
コードビハインド側(CollectionViewPage.xaml.cs)に、demoModel型のListオブジェクトを生成 & CollectionViewに表示する値を設定して、そのListを CollectionViewのItemSourceにセット。
public partial class CollectionViewPage : ContentPage{public CollectionViewPage(){InitializeComponent();List<demoModel> list = new List<demoModel>{new demoModel() { Name = "テキスト1", Comment = "コメント1", Image="Number01.png" },new demoModel() { Name = "テキスト2", Comment = "コメント2", Image="Number02.png" },new demoModel() { Name = "テキスト3", Comment = "コメント3", Image="Number03.png" },new demoModel() { Name = "テキスト4", Comment = "コメント4", Image="Number04.png" },new demoModel() { Name = "テキスト5", Comment = "コメント5", Image="Number05.png" },new demoModel() { Name = "テキスト6", Comment = "コメント6", Image="Number06.png" },new demoModel() { Name = "テキスト7", Comment = "コメント7", Image="Number07.png" },new demoModel() { Name = "テキスト8", Comment = "コメント8", Image="Number08.png" },};colView.ItemsSource = list;}}
■実行結果
「Horizontal grid」の場合
<CollectionView x:Name="colView"ItemsLayout="HorizontalGrid, 4"><CollectionView.ItemTemplate><DataTemplate><Grid Padding="10"><Grid.RowDefinitions><RowDefinition Height="35" /><RowDefinition Height="35" /></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition Width="70" /><ColumnDefinition Width="140" /></Grid.ColumnDefinitions><Image Grid.RowSpan="2"Source="{Binding Image}"Aspect="AspectFill"HeightRequest="60"WidthRequest="60" /><Label Grid.Column="1"Text="{Binding Name}"FontAttributes="Bold"LineBreakMode="TailTruncation" /><Label Grid.Row="1"Grid.Column="1"Text="{Binding Comment}"LineBreakMode="TailTruncation"FontAttributes="Italic"VerticalOptions="End" /></Grid></DataTemplate></CollectionView.ItemTemplate></CollectionView>
では今日はこれで。また次回(⌒ー⌒)ノ
0 件のコメント:
コメントを投稿