x: связать изображение с нулевой строкой
В XAML у меня есть следующая строка:
<Image x:Name="MainImage"
Source="{x:Bind ViewModel.MainPic,Mode=OneWay,TargetNullValue={x:Null}}"
Stretch="UniformToFill"/>
В ViewModel:
public string MainPic
{
get
{
if (Data == null)
return default(string);
else
return Data.Photos.ElementAtOrDefault(0).url;
}
}
Приложение компилируется нормально, но во время выполнения (поскольку данные заполняются через несколько секунд), приложение вылетает со следующим исключением:
System.ArgumentException: параметр неверен.
Отладчик ломается в:
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);
}
}
По-видимому, это происходит, поскольку MainPic возвращает ноль.
Теперь этот код отлично работает в WP8.1. Я попытался вернуть URI, что приводит к ошибке времени компиляции. Я полагаю, что в Win 10 может быть привязана только строка к источнику изображения (?). Я просто хочу пустую белую область, пока данные не будут заполнены, поэтому я не хочу предоставлять локальный источник изображения в качестве запасного варианта. Может кто-нибудь помочь мне портировать это для Win 10?
ОБНОВИТЬ:
Благодаря пользователям, которые ответили, сделан следующий вывод (для UWP):
Если вы привязываете источник изображения кstring
, не может бытьnull
или пустой""
, Одинокий персонаж"x"
или пробел" "
должно сработать.Если вы связываете сBitmapImage
, возвращаясьnull
работает.Вы можете использовать любой из методов, упомянутых @ Justin-xl. Для меня было сложно изменить все виртуальные машины, чтобы перестать возвращать ноль. Таким образом, добавление простого преобразователя в xaml также помогает.Вот код конвертера:
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));
}