x: Bild mit Nullzeichenfolge binden
n XAML habe ich folgende Zeile:
<Image x:Name="MainImage"
Source="{x:Bind ViewModel.MainPic,Mode=OneWay,TargetNullValue={x:Null}}"
Stretch="UniformToFill"/>
In ViewModel:
public string MainPic
{
get
{
if (Data == null)
return default(string);
else
return Data.Photos.ElementAtOrDefault(0).url;
}
}
App wird ordnungsgemäß kompiliert, aber während der Ausführung (da die Daten nach wenigen Sekunden ausgefüllt werden) stürzt die App mit der folgenden Ausnahme ab:
System.ArgumentException: Der Parameter ist falsch.
Debugger bricht um:
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);
}
}
Dies tritt anscheinend auf, da MainPic null zurückgibt.
Jetzt funktioniert dieser Code in WP8.1 einwandfrei. Ich habe versucht, uri zurückzugeben, was zu einem Fehler bei der Kompilierung führt. Ich glaube, dass in Win 10 (?) Nur eine Zeichenfolge an die Bildquelle gebunden werden kann. Ich möchte nur einen leeren weißen Bereich, bis die Daten ausgefüllt sind. Daher möchte ich keine lokale Bildquelle als Fallback angeben. Kann mir jemand helfen, dies für Win 10 zu portieren?
AKTUALISIEREN
Dank an die Benutzer, die geantwortet haben, wird die folgende Schlussfolgerung gezogen (für UWP):
Wenn Sie eine Bildquelle an ein @ bindstring
, es kann nicht seinnull
oder leer""
. Ein einzelner Charakter"x"
oder ein Leerzeichen" "
würde funktionierenWenn Sie an ein @ bindBitmapImage
, zurücknull
funktioniert.Sie können eine der von @ Justin-xl genannten Methoden verwenden. Für mich war es schwierig, alle VMs so zu ändern, dass sie nicht mehr null zurückgeben. Das Hinzufügen eines einfachen Konverters zu xaml macht also auch den Trick.Hier ist der Umrechnercode:
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));
}