XAML Hyperlink - leere NavigateUri

  • WPF

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von VincentTB.

    XAML Hyperlink - leere NavigateUri

    Hallo,
    ich habe eine List von Objekten, die jeweils eine Property "website" haben. Wenn man in einer ListBox das Item auswählt soll man u. a. die "website" angezeigt bekommen und auch draufklicken können. Jedoch ist bei manchen Objekten die website nothing, sodass immer schön ne NotSupportedException fliegt

    Quellcode

    1. NotSupportedException:'System.NotSupportedException: UriTypeConverter kann nicht von (NULL) konvertieren.

    Ist ja eigentlich auch logisch. Aber was kann man dagegen tun? Ich kann an dem Objekt nichts verändern. Ich habe schon überlegt, einen ValueConverter zu schreiben der einfach eine leere URI zurückgibt, wenn der String leer ist, nur ist mir dann aufgefallen, dass es gar keine leeren URIs gibt :) .
    So sieht mein XAML-Code aus:

    XML-Quellcode

    1. <Hyperlink NavigateUri="{Binding ElementName=lstPlugins,Path=SelectedItem.Website}" RequestNavigate="Hyperlink_RequestNavigate">
    2. <TextBlock Text="{Binding ElementName=lstPlugins,Path=SelectedItem.Website}"/>
    3. </Hyperlink>


    Wie löst man das am elegantesten?

    Hier ist nochmal die vollständige Fehlermeldung:

    Quellcode

    1. System.Windows.Data Error: 23 : Cannot convert '<null>' from type '<null>' to type 'System.Uri' for 'en-US' culture with default conversions; consider using Converter property of Binding. NotSupportedException:'System.NotSupportedException: UriTypeConverter kann nicht von (NULL) konvertieren.
    2. bei System.ComponentModel.TypeConverter.GetConvertFromException(Object value)
    3. bei System.ComponentModel.TypeConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)
    4. bei System.UriTypeConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)
    5. bei MS.Internal.Data.DefaultValueConverter.ConvertHelper(Object o, Type destinationType, DependencyObject targetElement, CultureInfo culture, Boolean isForward)'
    Mfg
    Vincent

    VincentTB schrieb:

    Jedoch ist bei manchen Objekten die website nothing, sodass immer schön ne NotSupportedException fliegt
    sorge dafür, dass nur Objekte in die Liste kommen, die auch eine Website haben.

    Andernfalls kann man ein DataTemplate in den Resourcen anlegen, was auf String matcht, auf Nothing aber nicht. Aber dafür must du evtl. deine Architektur ziemlich umstellen.
    Was spricht gegen die Verwendung eines Default-Wertes? Sollte der FallBackValue des Bindings nicht auch für sowas dienen? Bin mir aber grade nicht sicher, ob die Exception dann mit Sicherheit nicht auftritt, aber einen Versuch ist es glaube ich wert.
    Jo, vielen Dank für die Antwort. Das mit der FallBackValue funktioniert zwar nicht, jedoch gibt es ja eine TargetNullValue. Die also gesetzt und schwups keinen Fehler mehr.

    XML-Quellcode

    1. <Hyperlink RequestNavigate="Hyperlink_RequestNavigate">
    2. <Hyperlink.NavigateUri>
    3. <Binding Path="SelectedItem.Website" ElementName="lstPlugins">
    4. <Binding.TargetNullValue>
    5. www.google.de
    6. </Binding.TargetNullValue>
    7. </Binding>
    8. </Hyperlink.NavigateUri>
    9. <TextBlock Text="{Binding ElementName=lstPlugins,Path=SelectedItem.Website}"/>
    10. </Hyperlink>
    Mfg
    Vincent