私の場合、 path "MyZooSnap.Core;component/Resources/Images/i.jpg"
. Android のパスを変換するにはImageView
? 次のバインディングで使用するには:
{'AssetImagePath':{'Path':'ImagePath'}}
ありがとう
素早い回答:
assets/images/i1.png
AndroidAsset
images/i1.png
より長い答え:
理想的には、ViewModel はプラットフォームに依存せず、View の問題を認識しない必要があります。
したがって、ViewModel は次のようなプロパティを公開する可能性があります。
private GameState _state;
public GameState State
{
get { return _state; }
set { _state = value; RaisePropertyChanged(() => State); }
}
ここで、GameState は次のような列挙です。
public enum GameState
{
Stopped,
Running,
Paused,
GameOver
}
次に、次のようなアセット構造でこれらの状態を表す画像を作成できます。
/assets/gamestates/stopped.png
/assets/gamestates/running.png
/assets/gamestates/paused.png
/assets/gamestates/gameover.png
これらの各ファイルは、AndroidAsset の BuildAction でマークされています。
UI に正しい画像を表示するには、次のような値コンバーターが必要です。
public class GameStateConverter
: MvxBaseValueConverter
{
public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return string.Format("gamestates/{0}.png", ((GameState)value).ToString().ToLower());
}
}
次のような Converters ラッパーを使用してマップされます。
public class Converters
{
public readonly GameStateConverter GameState = new GameStateConverter();
}
これは、次を使用して setup.cs で構成されます。
protected override IEnumerable<Type> ValueConverterHolders
{
get { return new[] { typeof(Converters) }; }
}
これを配置すると、axml バインディング ステートメントは次のようになります。
{'AssetImagePath':{'Path':'State', 'Converter':'GameState'}}
アセットの代わりにリソースを使用する別のアプローチについては、「GridLayout を Android にバインドする問題MvxButtonIconBinding
」を参照してください。
問題を解決できませんでした。私のMainViewModel.cs
public class MainMenuViewModel
: MvxViewModel
{
private const string path = "myimage";
public List<SquareModel> Items { get; set; }
public IMvxCommand ShowItemCommand
{
get
{
return new MvxRelayCommand<Type>((type) => this.RequestNavigate(typeof(MainMenuViewModel)));
}
}
public MainMenuViewModel()
{
Items = GetCollection();
}
public List<SquareModel> GetCollection()
{
List<SquareModel> col = new List<SquareModel>();
for (int i = 0; i < 20; i++)
{
col.Add(new SquareModel { ID = i, PathImage = path });
}
return col;
}
}
私の Converts.cs
public class Converters
{
public readonly PathImageConverter GameImage = new PathImageConverter();
}
私のPathImageConverter.cs
public class PathImageConverter
: MvxBaseValueConverter
{
public override object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return string.Format("squareresources/{0}.png", value.ToString().ToLower());
}
}
マイ Setup.cs
public class Setup
: MvxBaseAndroidBindingSetup
{
public Setup(Context applicationContext)
: base(applicationContext)
{
}
protected override MvxApplication CreateApp()
{
return new App();
}
protected override IEnumerable<Type> ValueConverterHolders
{
get { return new[] { typeof(Converters.Converters) }; }
}
}
私のGameView.axml
<cirrious.mvvmcross.binding.android.views.MvxBindableGridView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res/MyZooSnap.UI"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="4"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:gravity="center"
local:MvxItemTemplate="@layout/itemimage"
local:MvxBind="{'ItemsSource':{'Path':'Items'}}" />
私のItemImage.axml
<ImageView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res/MyZooSnap.UI"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
local:MvxBind="{'AssetImagePath':{'Path':'PathImage', 'Converter':'GameImage'}}"
/>
私のUIプロジェクト:
画像がフォルダー Assets に配置され、画像の名前を示すだけで機能します。そして、別のフォルダーを作成してパスを指定すると:
/asset/folder/image.png
asset/folder/image.png
/folder/image.png
folder/image.png
動作しません!