programing

소스= 호스트에 대한 ImageSourceConverter 오류

iphone6s 2023. 5. 22. 20:50
반응형

소스= 호스트에 대한 ImageSourceConverter 오류

이미지의 원본 속성을 문자열에 바인딩합니다.이 문자열은 null일 수 있으며 이 경우 이미지를 표시하지 않습니다.그러나 Debug 출력에서 다음과 같은 메시지가 나타납니다.

시스템. 윈도우.Data Error: 23 : '<null>'을 '<null>' 유형에서 'System' 유형으로 변환할 수 없습니다.창문들.기본 변환이 있는 'en-AU' 문화에 대한 'Media.ImageSource'입니다. 바인딩의 Converter 속성을 사용해 보십시오.지원되지 않음예외: '시스템.지원되지 않음예외:ImageSourceConverter는 (null)에서 변환할 수 없습니다.시스템에서.구성요소 모델.Converter를 입력합니다.시스템에서 GetConvertFromException(개체 값)을(를) 가져옵니다.창문들.Media.ImageSourceConverter입니다.변환 원본(MS의 ITypeDescriptorContextContext, CultureInfo culture, Object value).내부의.Data.DefaultValueConverter입니다.도우미 변환(Objecto, 대상 유형)형식, DependencyObject targetElement, CultureInfo culture, Boolean isForward)'

소음 때문에 표시되지 않았으면 좋겠는데, 억제할 방법이 없을까요?

@AresAvatar가 ValueConverter를 사용할 것을 제안한 것은 맞지만, 이러한 구현은 상황에 도움이 되지 않습니다.이 작업은 다음과 같습니다.

public class NullImageConverter :IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null)
            return DependencyProperty.UnsetValue;
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        // According to https://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.convertback(v=vs.110).aspx#Anchor_1
        // (kudos Scott Chamberlain), if you do not support a conversion 
        // back you should return a Binding.DoNothing or a 
        // DependencyProperty.UnsetValue
        return Binding.DoNothing;
        // Original code:
        // throw new NotImplementedException();
    }
}

돌아오는DependencyProperty.UnsetValue또한 이러한 예외를 모두 무시하거나 무시할 경우의 성능 문제도 해결합니다.반환new BitmapSource(uri)또한 예외를 제거할 수도 있지만, 여전히 성능 문제가 있습니다(필요하지 않습니다).

물론 배관도 필요할 것입니다.

리소스:

<local:NullImageConverter x:Key="nullImageConverter"/>

이미지:

<Image Source="{Binding Path=ImagePath, Converter={StaticResource nullImageConverter}}"/>

Pat의 ValueConverter 기술을 사용했는데 아주 잘 작동했습니다.저는 여기서 Flobodob에 의한 TargetNullValue 기술도 시도해 보았습니다. 그리고 그것은 또한 잘 작동합니다.그것은 더 쉽고 깨끗합니다.

<Image Source="{Binding LogoPath, TargetNullValue={x:Null}}" />

TargetNullValue는 더 단순하며 변환기가 필요하지 않습니다.

이미지를 개체에 직접 바인딩하고 필요한 경우 "값 설정 취소"를 반환합니다.

<Image x:Name="Logo" Source="{Binding ImagePath}"  />

View Model의 속성:

    private string _imagePath = string.Empty;
    public object ImagePath 
    {
        get
        {
            if (string.IsNullOrEmpty(_imagePath))
                return DependencyProperty.UnsetValue;

            return _imagePath;
        }
        set
        {
            if (!(value is string)) 
                return;

            _imagePath = value.ToString();
            OnPropertyChanged("ImagePath");
        }
    }

언급URL : https://stackoverflow.com/questions/5399601/imagesourceconverter-error-for-source-null

반응형