연결된 속성

.NET 다중 플랫폼 앱 UI(.NET MAUI) 연결된 속성을 사용하면 개체가 자체 클래스에서 정의하지 않는 속성에 대한 값을 할당할 수 있습니다. 예를 들어 자식 요소는 연결된 속성을 사용하여 부모 요소에 사용자 인터페이스에 표시되는 방법을 알릴 수 있습니다. Grid 레이아웃을 사용하면 연결된 속성을 설정 Grid.Row 하여 자식의 행과 Grid.Column 열을 지정할 수 있습니다. Grid.RowGrid.Column 연결된 속성은 자체 속성이 아닌 자식 요소 GridGrid 설정되기 때문입니다.

바인딩 가능한 속성은 다음 시나리오에서 연결된 속성으로 구현해야 합니다.

  • 정의 클래스 이외의 클래스에 사용할 수 있는 속성 설정 메커니즘이 필요한 경우
  • 클래스가 다른 클래스와 쉽게 통합되어야 하는 서비스를 나타내는 경우

바인딩 가능한 속성에 대한 자세한 내용은 바인딩 가능한 속성을 참조 하세요.

연결된 속성 만들기

연결된 속성을 만드는 프로세스는 다음과 같습니다.

  1. BindableProperty 메서드 오버로드 중 하나를 사용하여 인스턴스를 CreateAttached 만듭니다.
  2. PropertyName 및 PropertyName 메서드를 연결된 속성의 접근자로 제공합니다Getstatic.Set

속성 만들기

다른 형식에서 사용할 연결된 속성을 만들 때 속성이 만들어지는 클래스에서 파생 BindableObject할 필요가 없습니다. 그러나 접근자의 대상 속성은 해당 속성이거나 파생BindableObject되어야 합니다. 대상 속성에 대한 자세한 내용은 기본 바인딩을 참조 하세요.

연결된 속성은 형식BindableProperty의 속성을 선언하여 public static readonly 만들 수 있습니다. 바인딩 가능한 속성은 메서드 오버로드 중 하나의 반환된 값으로 BindableProperty.CreateAttached 설정해야 합니다. 선언은 소유 클래스의 본문 내에 있어야 하지만 멤버 정의 외부에 있어야 합니다.

Important

연결된 속성에 대한 명명 규칙은 연결된 속성 식별자가 메서드에 CreateAttached 지정된 속성 이름과 일치하고 "Property"가 추가되어야 한다는 것입니다.

다음 코드는 연결된 속성의 예를 보여줍니다.

public class MyControl
{
    public static readonly BindableProperty HasShadowProperty =
        BindableProperty.CreateAttached("HasShadow", typeof(bool), typeof(MyControl), false);
}

형식의 bool연결된 HasShadowProperty속성을 만듭니다. 이 속성은 클래스에서 MyControl 소유하며 기본값 false은 .입니다. 이 경우 소유권은 예를 들어 MyControl.HasShadow형식Type.Property을 사용하여 XAML에서 속성에 액세스한다는 것을 의미합니다.

만드는 동안 지정할 수 있는 매개 변수를 포함하여 바인딩 가능한 속성을 만드는 방법에 대한 자세한 내용은 바인딩 가능한 속성 만들기를 참조 하세요.

접근자 만들기

Static GetPropertyNameSetPropertyName 메서드는 연결된 속성의 접근자로 필요합니다. 그렇지 않으면 속성 시스템에서 연결된 속성을 사용할 수 없습니다. GetPropertyName 접근자가 다음 서명을 준수해야 합니다.

public static valueType GetPropertyName(BindableObject target)

GetPropertyName 접근자가 연결된 속성의 해당 BindableProperty 필드에 포함된 값을 반환해야 합니다. 메서드를 GetValue 호출하고 값을 가져올 바인딩 가능한 속성 식별자를 전달한 다음 결과 값을 필수 형식으로 캐스팅하여 이 작업을 수행할 수 있습니다.

SetPropertyName 접근자가 다음 서명을 준수해야 합니다.

public static void SetPropertyName(BindableObject target, valueType value)

SetPropertyName 접근자가 연결된 속성의 해당 BindableProperty 필드 값을 설정해야 합니다. 이 작업은 메서드를 SetValue 호출하고 값을 설정할 바인딩 가능한 속성 식별자와 설정할 값을 전달하여 수행할 수 있습니다.

두 접근자의 경우 대상 개체는 이거나 파생BindableObject되어야 합니다. 대상 개체에 대한 자세한 내용은 기본 바인딩을 참조 하세요.

다음 코드 예제에서는 연결된 속성에 대한 접근자를 HasShadow 보여 줍니다.

public class MyControl
{
    public static bool GetHasShadow(BindableObject view)
    {
        return (bool)view.GetValue (HasShadowProperty);
    }

    public static void SetHasShadow(BindableObject view, bool value)
    {
        view.SetValue(HasShadowProperty, value);
    }  
}

연결된 속성 사용

연결된 속성이 만들어지면 XAML 또는 코드에서 사용할 수 있습니다. XAML에서는 접두사를 사용하여 네임스페이스를 선언하고 CLR(공용 언어 런타임) 네임스페이스 이름을 나타내는 네임스페이스 선언과 필요에 따라 어셈블리 이름을 선언합니다. 자세한 내용은 XAML 네임스페이스를 참조 하세요.

다음 예제에서는 연결된 속성을 포함하는 사용자 지정 형식에 대한 XAML 네임스페이스를 보여 줍니다. 이 네임스페이스는 사용자 지정 형식을 참조하는 앱 코드와 동일한 어셈블리 내에 정의됩니다.

<ContentPage ... xmlns:local="clr-namespace:ShadowDemo" ...>
  ...
</ContentPage>

네임스페이스 선언은 다음 XAML에 설명된 대로 특정 컨트롤에 연결된 속성을 설정할 때 사용됩니다.

<Label Text="Label with shadow" local:MyControl.HasShadow="true" />

동등한 C# 코드는 다음 코드 예제와 같습니다.

Label label = new Label { Text = "Label with shadow" };
MyControl.SetHasShadow (label, true);

스타일이 있는 연결된 속성 사용

연결된 속성은 스타일별로 컨트롤에 추가할 수도 있습니다. 다음 XAML 코드 예제에서는 연결된 속성을 사용하는 HasShadow 컨트롤에 대한 Label 명시적 스타일을 보여 줍니다.

<Style x:Key="ShadowStyle" TargetType="Label">
  <Style.Setters>
    <Setter Property="local:MyControl.HasShadow" Value="true" />
  </Style.Setters>
</Style>

다음 코드 예제에 설명된 대로 StaticResource 태그 확장을 사용하여 해당 Style 속성을 Style 인스턴스로 설정하면 StyleLabel에 적용할 수 있습니다.

<Label Text="Label with shadow" Style="{StaticResource ShadowStyle}" />

스타일에 대한 자세한 내용은 스타일을 참조하세요.

고급 시나리오

연결된 속성을 만들 때 고급 연결된 속성 시나리오를 사용하도록 설정할 수 있는 몇 가지 선택적 매개 변수가 있습니다. 여기에는 속성 변경 내용 검색, 속성 값 유효성 검사 및 속성 값 강제 변환이 포함됩니다. 자세한 내용은 고급 시나리오를 참조 하세요.