소스= 호스트에 대한 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
'programing' 카테고리의 다른 글
| Visual Studio Code에서 서로 다른 분기를 비교하는 방법 (0) | 2023.05.27 |
|---|---|
| Excel에서 Mongodb를 연결하는 방법 (0) | 2023.05.22 |
| 파일에서 임의의 줄 선택 (0) | 2023.05.22 |
| ASP.NET Core 응용 프로그램이 호스팅되는 포트를 지정하는 방법은 무엇입니까? (0) | 2023.05.22 |
| 비동기 함수를 호출하는 동안 Mocha 테스트에서 시간 초과를 방지하는 방법 오류: 시간 초과가 2000ms를 초과했습니다. (0) | 2023.05.22 |