동적 리소스 사용 및 업데이트

완료됨

이전 단원에서는 XAML에서 리소스를 정의하고 정적 값으로 사용했습니다. 그러나 StaticResource가 적절하지 않은 경우가 있습니다. 다음 시나리오를 고려하세요.

  • 런타임에 사용자가 앱의 모양을 변경할 수 있는 색 테마를 구현한다고 가정합니다. StaticResource 마크업 확장은 사전 조회를 한 번만 수행하므로 UI를 동적으로 업데이트할 수 없습니다.

  • 사용자 기본 설정을 웹 서버에 저장하고, 애플리케이션이 시작될 때 이를 로드할 수 있습니다. StaticResource 마크업 확장은 사전에서 키를 찾을 수 없는 경우 예외를 throw합니다.

이 단원에서는 동적 리소스를 사용하여 이러한 문제를 처리하는 방법을 보여줍니다.

런타임에 리소스를 업데이트하는 방법

리소스 사전에 리소스를 저장합니다. 런타임에 이러한 리소스를 업데이트하는 코드를 작성할 수 있습니다. 새 리소스를 추가하거나 기존 리소스를 제거할 수도 있습니다.

다음과 같은 예제를 참조하세요.

<ContentPage.Resources>
    <Color x:Key="PanelBackgroundColor">Blue</Color>
</ContentPage.Resources>

애플리케이션이 실행되는 동안 PanelBackgroundColor 리소스 값을 변경하려고 한다고 가정해 보세요. 페이지의 코드 숨김 파일에 코드를 추가하여 Resources 속성에 액세스할 수 있습니다. 다음 예제에서는 이전 XAML 예제의 리소스 값을 다른 색으로 업데이트합니다.

this.Resources["PanelBackgroundColor"] = Colors.Green;

DynamicResource란?

DynamicResource는 리소스 사전에서 리소스를 조회하기 위한 또 다른 마크업 확장입니다. 대상 개체를 만들 때 사전 조회를 수행한다는 점에서 StaticResource와 유사합니다. 그러나 사전의 리소스에 대한 변경도 수신 대기합니다. 사전의 리소스 값이 변경되면 DynamicResource가 UI를 자동으로 업데이트합니다.

DynamicResourceStaticResource보다 유리합니다. 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 값이 자동으로 업데이트됩니다.

지식 점검

1.

StaticResource가 제공하지 않는 DynamicResource 기능은 무엇인가요?