DataTemplateのコンバーターを使用してListViewにバインドされたTransportModeTypeという列挙型のリストがあります。 ViewModelには、ListViewコントロールがどのように見えるこのコンバーターを使用してXamarin Xamlに文字列のリストをバインドする
public class TransportTypeViewMode:ViewModelBase{
public TransportTypeViewMode()
{
TransportTypes= new List<TransportTypeEnum>();
TransportTypes.add(TransportTypeEnum.Car);
TransportTypes.add(TransportTypeEnum.Bus);
TransportTypes.add(TransportTypeEnum.Plane);
}
List<TransportTypeEnum> TransportTypes{get;set;}}
のように見えるこの
<ListView ItemsSource="{Binding TransportModeTypes}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ContentView>
<Image Source="{Binding Converter={StaticResource ListToImageConverter}}" Aspect="AspectFit"/>
</ContentView>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
とListToImageConverterと呼ばれる私のコンバータは、コンバータは、値がnullであることを例外がスローされます。この
public class TransportModeEnumToImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var transporttModeType = (TransportModeTypeEnum) value;
string imagePath = String.Empty;
switch (transporttModeType)
{
case TransportModeTypeEnum.Bus:
imagePath = "bus.png";
break;
case TransportModeTypeEnum.Train:
imagePath = "train.png";
break;
case TransportModeTypeEnum.Car:
imagePath = "car.png";
break;
case TransportModeTypeEnum.Plane:
imagePath = "plane.png";
break;
default:
throw new ArgumentOutOfRangeException();
}
imagePath = "Common.Images." + imagePath;
var imgResc= ImageSource.FromResource(imagePath);
return imgResc;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
のように見えます..私の縛りには何が欠けていますか
nullチェックを追加して、空の文字列などを返します。バインドが完了すると、null値でいつか初期化されます。あなたはおそらくそれを無視しても安全でしょう。 –
バインディング式にバインディングパスを指定する必要があると思います。 – Jason
偉大なcatch @Jason!完全に見落とされているのは –