다음을 통해 공유


바인딩 대체

샘플을 찾아봅니다. 샘플 찾아보기

바인딩 소스를 확인할 수 없거나 바인딩에 성공하지만 null 값을 반환하기 때문에 경우에 따라 데이터 바인딩이 실패합니다. 값 변환기 또는 기타 추가 코드를 사용하여 이러한 시나리오를 처리할 수 있고 데이터 바인딩은 바인딩 프로세스에 실패하는 경우 사용할 대체 값을 정의하여 더 강력하게 만들 수 있습니다. .NET 다중 플랫폼 앱 UI(.NET MAUI) 앱에서는 바인딩 식에서 속성 및 TargetNullValue 속성을 정의하여 FallbackValue 이 작업을 수행할 수 있습니다. 이러한 속성이 BindingBase 클래스에 위치하기 때문에, 바인딩, 다중 바인딩, 컴파일된 바인딩 및 Binding 태그 확장과 함께 사용할 수 있습니다.

참고 항목

바인딩 식에서 FallbackValueTargetNullValue 속성을 사용하는 것은 선택 사항입니다.

대체 값 정의

FallbackValue 속성을 사용하면 바인딩 소스를 확인할 수 없을 때 사용되는 대체 값을 정의할 수 있습니다. 이 속성을 설정하는 일반적인 시나리오는 유형이 다른 바인딩된 컬렉션의 모든 개체에 존재하지 않을 수 있는 원본 속성에 바인딩된 경우입니다.

다음 예제에서는 속성을 설정하는 방법을 FallbackValue 보여 줍니다.

<Label Text="{Binding Population, FallbackValue='Population size unknown'}"
       ... />   

바인딩의 바인딩은 바인딩 Label 원본을 확인할 수 없는 경우 대상에 설정되는 값(작은따옴표 문자로 구분됨)을 정의 FallbackValue 합니다. 따라서 FallbackValue 속성에 정의된 값은 Population 속성이 바인딩된 개체에 존재하지 않는 경우 표시됩니다.

FallbackValue 속성 값을 인라인으로 정의하는 대신 ResourceDictionary에서 리소스로 정의하는 것이 좋습니다. 이 방식은 이러한 값을 단일 위치에서 한 번 정의하고 쉽게 지역화할 수 있다는 장점이 있습니다. 그런 다음, StaticResource 태그 확장을 사용하여 리소스를 검색할 수 있습니다.

<Label Text="{Binding Population, FallbackValue={StaticResource populationUnknown}}"
       ... />  

참고 항목

바인딩 식을 사용하여 FallbackValue 속성을 설정할 수 없습니다.

FallbackValue 속성이 바인딩 식에서 설정되어 있지 않고 바인딩 경로 또는 경로의 일부가 확인되지 않은 경우 대상에서 BindableProperty.DefaultValue를 설정합니다. 그러나 속성이 FallbackValue 설정되고 바인딩 경로 또는 경로의 일부가 확인되지 않으면 값 속성의 FallbackValue 값이 대상에 설정됩니다.

FallbackValue 바인딩.

따라서 이 예제 Label 에서는 바인딩된 개체에 속성이 없기 때문에 "채우기 크기를 알 수 없음"을 Population 표시합니다.

Important

FallbackValue 속성을 설정한 경우 바인딩 식에서 정의된 값 변환기가 실행되지 않습니다.

null 대체 값 정의

TargetNullValue 속성을 사용하면 바인딩 소스를 확인할 수 없지만 값이 null일 때 사용되는 대체 값을 정의할 수 있습니다. 이 속성을 설정하는 일반적인 시나리오는 바인딩된 컬렉션에서 null일 수 있는 원본 속성에 바인딩된 경우입니다.

다음 예제에서는 속성을 설정하는 방법을 TargetNullValue 보여 줍니다.

<ListView ItemsSource="{Binding Monkeys}"
          ...>
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <Grid>
                    ...
                    <Image Source="{Binding ImageUrl, TargetNullValue='https://upload.wikimedia.org/wikipedia/commons/2/20/Point_d_interrogation.jpg'}"
                           ... />
                    ...
                    <Label Text="{Binding Location, TargetNullValue='Location unknown'}"
                           ... />
                </Grid>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

Label 다의 Image 바인딩은 바인딩 경로가 반환될 경우 적용될 값(작은따옴표 문자로 구분됨)을 정의 TargetNullValue 합니다null. 따라서 ImageUrlLocation 속성을 정의하지 않은 경우 컬렉션의 모든 개체에 TargetNullValue 속성에 정의된 값이 표시됩니다.

TargetNullValue 속성 값을 인라인으로 정의하는 대신 ResourceDictionary에서 리소스로 정의하는 것이 좋습니다. 이 방식은 이러한 값을 단일 위치에서 한 번 정의하고 쉽게 지역화할 수 있다는 장점이 있습니다. 그런 다음, StaticResource 태그 확장을 사용하여 리소스를 검색할 수 있습니다.

<Image Source="{Binding ImageUrl, TargetNullValue={StaticResource fallbackImageUrl}}"
       ... />
<Label Text="{Binding Location, TargetNullValue={StaticResource locationUnknown}}"
       ... />

참고 항목

바인딩 식을 사용하여 TargetNullValue 속성을 설정할 수 없습니다.

바인딩 식에서 TargetNullValue 속성을 설정하지 않으면 null라는 원본 값은 값 변환기가 정의된 경우 변환되고, StringFormat이 정의된 경우 서식이 지정됩니다. 그런 다음, 대상에 대한 결과가 설정됩니다. 그러나 속성이 TargetNullValue 설정되면 값 변환기가 정의된 경우 원본 값 null 이 변환되고 변환 후에도 계속 null 되면 속성 값 TargetNullValue 이 대상에 설정됩니다.

TargetNullValue 바인딩.

따라서 이 예제 Image 에서 개체는 Label 원본 개체가 있을 때 해당 개체를 표시 TargetNullValue 합니다 null.

Important

TargetNullValue 속성을 설정한 경우 바인딩 식에서 문자열 서식 지정이 적용되지 않습니다.

TargetNullValue 및 FallbackValue 비교

FallbackValue 둘 다 TargetNullValue 데이터 바인딩에서 바인딩된 값 null 이 있거나 바인딩이 실패하는 시나리오를 처리하는 데 사용됩니다. 각 사용 시기를 알면 원활한 사용자 환경을 보장하는 데 도움이 됩니다.

TargetNullValue

바인딩이 TargetNullValue 성공하지만 바인딩된 속성이 null다음과 같은 경우 표시할 값을 지정하려면 이 속성을 사용합니다.

<Label Text="{Binding FirstName, TargetNullValue='No name available'}" />

이 예제에서 " FirstName null 사용할 수 있는 Label 이름 없음"이 표시됩니다.

FallbackValue

FallbackValue 잘못된 경로 또는 누락된 바인딩 컨텍스트와 같이 바인딩 프로세스가 완전히 실패하는 경우 속성을 사용하여 값을 제공합니다.

<Label Text="{Binding FirstName, FallbackValue='Binding failed'}" />

이 예제에서 바인딩이 실패 Label 하면 "바인딩 실패"가 표시됩니다.

결합된 사용

FallbackValue 속성은 TargetNullValue 단일 바인딩 식에서 결합할 수 있습니다.

<Label Text="{Binding FirstName, TargetNullValue='No name available', FallbackValue='Binding failed'}" />