2010-04-30 3 views
1

바운드 경로 파일이 없는데 어떻게 기본 이미지를 표시 할 수 있습니까?누락 된 파일에 이미지 소스 바운드

<Image Source="{Binding DisplayedBook.ImagePath}" /> 

내 솔루션 : 이미지가 존재하고 적절한 경로를 반환 여부를 확인 컨버터를 사용합니다.

답변

5

ImagePath getter에서 기본 이미지를 반환하지 않으려면 다른 접근 방식이 null을 반환하는 것보다 좋습니다.

public string ImagePath 
{ 
    get 
    { 
    return File.Exists(m_Path) ? m_Path : null; 
    } 
} 

및 XAML에서

는 또한 가져 바인딩은 값을 반환 할 수없는 경우에 사용하는 값을 설정하는 FallbackValue 속성을 추가 할 수 있습니다

<Image Source="{Binding DisplayedBook.ImagePath, TargetNullValue={StaticResource SomeImageResource}}" /> 
1

wpf를 사용하지 않으므로 특별한 기능이 있는지 모르겠습니다.

그러나 나는 게터 메서드 DisplayedBook.ImagePath 같은 것을 구현할 것이다. 파일이 존재하는지 검사하고 그렇지 않으면 기본 이미지의 경로를 반환합니다.

+0

나는 그것에 대해 생각했다. 문제는 책 엔티티와 UI가 결합 된 것이다. 그리고이 책은 기본 이미지가 무엇인지 알 수 없습니다. – Amirshk

1

다음과 같이 할 수 있습니다.

경로의 이미지 경로를 가져옵니다.

if (!File.Exists(path)) 
{ 
    BitmapImage image = new BitmapImage(); 

    image.BeginInit(); 
    image.UriSource = new Uri(path); 
    image.DecodePixelWidth = Convert.ToInt32(img.Width); 
    image.EndInit(); 

    //Set the image corresponding to that bound 
    this.img.Source = image; 
} 
4

당신은 코드 숨김이 XAML에 연결 한 경우 (즉,하지 템플릿)는 ImageFailed 이벤트에 기본 이미지를 설정할 수 있습니다

<Image Source="{Binding ImagePath}" ImageFailed="Image_ImageFailed" /> 

및 핸들러 :

private void Image_ImageFailed(object sender, ExceptionRoutedEventArgs e) 
    { 
     Image image = e.Source as Image; 
     if (image != null) 
      image.Source = new BitmapImage(new Uri("http://SomeDefaultImagePath.jpg")); 
    } 
0

바인딩의 TargetNullValue 속성을 사용합니다.

관련 문제