x: enlazar imagen con cadena nula
En XAML tengo la siguiente línea:
<Image x:Name="MainImage"
Source="{x:Bind ViewModel.MainPic,Mode=OneWay,TargetNullValue={x:Null}}"
Stretch="UniformToFill"/>
En ViewModel:
public string MainPic
{
get
{
if (Data == null)
return default(string);
else
return Data.Photos.ElementAtOrDefault(0).url;
}
}
La aplicación se compila bien pero durante la ejecución (dado que los datos se completan después de unos segundos), la aplicación se bloquea con la siguiente excepción:
System.ArgumentException: el parámetro es incorrecto.
El depurador se rompe en:
private void Update_ViewModel_MainPic(global::System.String obj, int phase)
{
if((phase & ((1 << 0) | NOT_PHASED | DATA_CHANGED)) != 0)
{
/*HERE>>*/ XamlBindingSetters.Set_Windows_UI_Xaml_Controls_Image_Source(this.obj23, (global::Windows.UI.Xaml.Media.ImageSource) global::Windows.UI.Xaml.Markup.XamlBindingHelper.ConvertValue(typeof(global::Windows.UI.Xaml.Media.ImageSource), obj), null);
}
}
Aparentemente, esto ocurre porque MainPic está volviendo nulo.
Ahora, este código funciona bien en WP8.1. He intentado devolver uri que da como resultado un error de tiempo de compilación. Creo que solo la cadena se puede unir a la fuente de la imagen en Win 10 (?) Solo quiero un área blanca en blanco hasta que se llenen los datos, por lo tanto, no deseo dar una fuente de imagen local como reserva. ¿Alguien puede ayudarme a portar esto para Win 10?
ACTUALIZAR:
Gracias a los usuarios que respondieron, se saca la siguiente conclusión (para UWP):
Si está vinculando la fuente de imagen a unstring
, no puede sernull
o vacio""
. Un personaje sencillo"x"
o un espacio" "
trabajaría.Si te unes a unBitmapImage
volviendonull
trabajos.Puede usar cualquiera de los métodos mencionados por @ Justin-xl. Para mí, cambiar todos los vm para dejar de devolver nulo fue difícil. Por lo tanto, agregar un convertidor simple a xaml también funciona.Aquí está el código del convertidor:
public object Convert(object value, Type targetType, object parameter, string language)
{
if (string.IsNullOrEmpty(value as string))
{
return null;
}
else return new BitmapImage(new Uri(value as string, UriKind.Absolute));
}