Androidで利用可能なGridViewがあります-しかし、私は個人的にmvvmcrossでデータバインディングを使用してGridViewを使用したことはありません-しかし、追加するのは非常に簡単だと聞きました-https://github.com/slodge/MvvmCross/issues/37を参照してください
グリッドビューの代わりに、垂直線形レイアウトと水平線形レイアウトの組み合わせを使用して独自のグリッドを作成できます。これを行うには、次のような外側の線形レイアウトを使用します。
<Mvx.MvxBindableLinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
local:MvxItemTemplate="@layout/listitem_row"
local:MvxBind="{'ItemsSource':{'Path':'Rows'}}"
/>
行テンプレートを含む
<Mvx.MvxBindableLinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
local:MvxItemTemplate="@layout/listitem_cell"
local:MvxBind="{'ItemsSource':{'Path':'Cells'}}"
/>
とセルだけを含むImageView
GridViewとLinearLayoutsのどちらを使用するかに関係なく、個々のImageViewスクエアに対応するコンテナを構築できるはずです。
これが準備できたら、各正方形に表示される画像の変更は非常に簡単です。これは、ImageViewのAssetImagePathを正方形を表すViewModelオブジェクトのプロパティにバインドする場合にすぎません。
すなわち。ViewModelが次の場合:
public class MyViewModel : MvxViewModel
{
public List<GameRow> Rows {get;private set;}
}
GameRowは次のとおりです。
public class GameRow : MvxNotifyProperty
{
public List<GameSquare> Cells {get;private set;}
}
GameSquareは次のとおりです。
public class GameSquare : MvxNotifyProperty
{
private string _icon;
public string Icon
{
get { return _icon; }
set { _icon = value; RaisePropertyChanged(() => Icon);
}
}
その場合、各ImageViewディスプレイのバインディングは次のようになります。
{'AssetImagePath':{'Path':'Icon'}}
明らかに、ViewModelでアイコンパスを直接使用したくない場合があります。代わりに列挙型を使用することをお勧めします。これを行う場合は、ValueConverter
またはカスタムバインディングを使用して、現在の列挙値に基づいて正しい画像を表示することをお勧めします。
Mvvmcrossを使用して画像srcをリソース描画可能画像にバインドする方法の質問と回答を参照してください。詳細については。