동적 리소스 사용 및 업데이트
- 5분
이전 단원에서는 XAML(Extensible Application Markup Language)에서 리소스를 정의하고 정적 값으로 사용했습니다. 그러나 StaticResource 가 적절하지 않은 경우도 있습니다. 다음 시나리오를 고려하세요.
런타임에 사용자가 앱의 모양을 변경할 수 있는 색 테마를 구현한다고 가정합니다. StaticResource 태그 확장은 사전 조회를 한 번만 수행하므로 UI를 동적으로 업데이트할 수 없습니다.
사용자 기본 설정을 웹 서버에 저장하고, 애플리케이션이 시작될 때 이를 로드할 수 있습니다. StaticResource 마크업 확장자는 사전에서 키를 찾을 수 없는 경우 예외를 발생시킵니다.
이 단원에서는 동적 리소스를 사용하여 이러한 문제를 처리하는 방법을 보여줍니다.
런타임에 리소스를 업데이트하는 방법
리소스 사전에 리소스를 저장합니다. 런타임에 이러한 리소스를 업데이트하는 코드를 작성할 수 있습니다. 새 리소스를 추가하거나 기존 리소스를 제거할 수도 있습니다.
다음과 같은 예제를 참조하세요.
<ContentPage.Resources>
<Color x:Key="PanelBackgroundColor">Blue</Color>
</ContentPage.Resources>
애플리케이션이 실행되는 동안 PanelBackgroundColor 리소스의 값을 변경하려는 경우를 가정해 보겠습니다. 페이지의 코드 숨김 파일에 코드를 추가하여 Resources 속성에 액세스할 수 있습니다. 다음 예제에서는 이전 XAML 예제의 리소스 값을 다른 색으로 업데이트합니다.
this.Resources["PanelBackgroundColor"] = Colors.Green;
DynamicResource란?
DynamicResource 는 리소스 사전에서 리소스를 조회하기 위한 또 다른 태그 확장입니다. 대상 개체를 만들 때 사전 조회를 수행한다는 측면에서 StaticResource 와 비슷합니다. 그러나 사전의 리소스에 대한 변경도 수신 대기합니다. 사전의 리소스 값이 변경되면 DynamicResource 는 자동으로 UI를 업데이트합니다.
DynamicResource 는 StaticResource보다 유리합니다. DynamicResource가 사전에서 키를 찾을 수 없는 경우 속성을 설정하지 않은 상태로 둡니다. StaticResource와 달리 누락된 키는 오류가 아니며 예외를 throw하지 않습니다.
참고
DynamicResource 태그 확장의 특성은 애플리케이션에 약간의 성능 저하를 부과합니다. XAML 페이지에서 StaticResource 대신 DynamicResource 를 사용할 수 있지만 리소스가 변경되지 않으면 StaticResource 태그 확장으로 참조해야 합니다.
이전 예제에서 업데이트된 배경색을 사용하려면 다음과 같이 XAML 코드에 DynamicResource 를 적용할 수 있습니다.
<ContentPage ...>
<ContentPage.Resources>
<Color x:Key="PanelBackgroundColor">Blue</Color>
</ContentPage.Resources>
<StackLayout BackgroundColor="{DynamicResource PanelBackgroundColor}">
...
</StackLayout>
</ContentPage>
PanelBackgroundColor 리소스의 값이 변경되면 StackLayout 컨트롤의 BackgroundColor 값이 자동으로 업데이트됩니다.