블로그 이미지
* Microsoft MVP - Windows Development 2014 ~ 2019 5ring * LINE : kaki104 * facebook : https://www.facebook.com/kaki104 https://www.facebook.com/groups/w10app/ kaki104

카테고리

List All (551)
Xamarin Forms (4)
Bot Framework (19)
Azure (9)
Windows 10 (35)
Facebook News & Tips (158)
Windows App(Universa.. (83)
Windows 8&8.1 (113)
Windows Phone 8 (42)
Silverlight (37)
HTML5 & MVC4 (16)
WPF (1)
Portable Class Library (2)
Uncategorised Tips a.. (3)
Kinect for Windows (2)
ETC (12)
kaki104 Scrap (4)
App News (11)
Total522,039
Today48
Yesterday101

앱을 개발하기 시작하는 단계에서는 빌드 에러 이외에는 크게 신경을 쓰지 않는다. 그러나, 어느 정도 앱이 완성이 된 후에는 주의!라고 뜨는 에러 메시지도 신경을 써 주어야 한다.


그 중에 BindingExpression 에러가 대표적인 그런 종류의 에러라고 할 수 있는데. 딱히 빌드 오류가 발생하지는 않치만, Debug output 창을 한가득 체운다면 상당히 기분이 더럽다.


그렇치 않은가??



에러 내용은 아래와 같다.


Error: Converter failed to convert value of type 'String' to type 'ImageSource'; BindingExpression: Path='BaseImageUri' DataItem='CrossPlatform.Universal.PCL.Models.SkyDriveFolderM'; target element is 'Windows.UI.Xaml.Controls.Image' (Name='null'); target property is 'Source' (type 'ImageSource').


에러 메시지의 내용은 BaseImageUri라는 string 프로퍼티를 Image 컨트롤의 ImageSource에 바인딩 해 놓았는데, BaseImageUri가 null이라서 컨버팅을 할 수 없다는 내용의 오류이다.


BaseImageUri라는 프로퍼티가 항상 값을 가진다면, 저런 오류가 나지 않겠지만, 저 프로퍼티는 원래 값이 존재할 수도, 존재하지 않을 수도 있다는 것이다.


문제의 xaml 코드


<Image VerticalAlignment="Center" Margin="11,21,11,44" HorizontalAlignment="Center" Source="{Binding BaseImageUri" Stretch="UniformToFill"/>



어떻게 이런 메시지가 출력되지 않도록 할 수 있을까?



아래 내용을 참고하자.

DependencyProperty.UnsetValue Field

https://msdn.microsoft.com/en-us/library/system.windows.dependencyproperty.unsetvalue(v=vs.110).aspx




문제 해결을 위해 간단하게 Converter를 하나 만들자.

    public class StringToImageSourceConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, string language)
        {
            if (string.IsNullOrEmpty(value as string)) return DependencyProperty.UnsetValue;
            return value.ToString();
        }

        public object ConvertBack(object value, Type targetType, object parameter, string language)
        {
            throw new NotImplementedException();
        }
    }


그리고, 위의 xaml 코드를 컨버터를 사용하도록 변경한다.


<Image VerticalAlignment="Center" Margin="11,21,11,44" HorizontalAlignment="Center" Source="{Binding BaseImageUri, Converter={StaticResource StringToImageSourceConverter}}" Stretch="UniformToFill"/>


그리고 실행하면, 에러 메시지가 더 이상 출력되지 않는 것을 알 수 있다.


Posted by MVP kaki104

티스토리 툴바