티스토리 뷰
앱을 개발하기 시작하는 단계에서는 빌드 에러 이외에는 크게 신경을 쓰지 않는다. 그러나, 어느 정도 앱이 완성이 된 후에는 주의!라고 뜨는 에러 메시지도 신경을 써 주어야 한다.
그 중에 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"/>
그리고 실행하면, 에러 메시지가 더 이상 출력되지 않는 것을 알 수 있다.
'UWP & Windows App > Expert' 카테고리의 다른 글
Using Xaml Toolkit - TreeView control part 1 (0) | 2015.04.29 |
---|---|
Using the MenuFlyoutPresenter style (0) | 2015.04.28 |
Beta testing을 이용해서 오류 수정하기 (0) | 2015.04.13 |
Design time debug in Visual Studio 2013 (0) | 2015.03.10 |
MemoryViewer - Memory leak check (0) | 2014.11.18 |
- Total
- Today
- Yesterday
- uno platform
- .net 5.0
- kiosk
- dotNETconf
- Cross-platform
- Build 2016
- MVVM
- Always Encrypted
- #prism
- Visual Studio 2022
- .net
- IOT
- Microsoft
- C#
- Bot Framework
- UWP
- Windows 10
- XAML
- #Windows Template Studio
- ef core
- uno-platform
- #MVVM
- visual studio 2019
- windows 11
- WPF
- LINQ
- #uwp
- PRISM
- ComboBox
- Behavior
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |