BindableObject 확장
확장은 BindableObject
에 대한 구성 Binding
을 지원하는 일련의 확장 메서드를 BindableObject
제공합니다.
확장은 다음 메서드를 제공합니다.
바인딩
이 메서드는 Bind
설정과 관련된 다양한 편의를 제공하는 여러 오버로드를 Binding
제공합니다. .NET MAUI 애플리케이션의 Binding
데이터 가능성에 대한 자세한 내용은 Microsoft 설명서를 참조 하세요.
예시
메서드에 대한 오버로드가 많이 있습니다 Bind
.
단방향 바인딩
뷰 모델(RegistrationViewModel
) 속성에서 속성으로 호출 RegistrationCode
되는 Text
단방향 바인딩은 Label
다음과 같이 만들 수 있습니다.
new Entry()
.Bind(Label.TextProperty,
getter: static (RegistrationViewModel vm) => vm.RegistrationCode)
양방향 바인딩
뷰 모델(RegistrationViewModel
) 속성에서 속성으로 호출 RegistrationCode
되는 Text
양방향 바인딩은 Entry
다음과 같이 만들 수 있습니다.
new Entry()
.Bind(Entry.TextProperty,
getter: static (RegistrationViewModel vm) => vm.RegistrationCode,
setter: static (RegistrationViewModel vm, string code) => vm.RegistrationCode = code)
복합(중첩) 바인딩
속성 내의 속성("중첩된 바인딩" handlers
)에 바인딩하는 경우 매개 변수가 필요합니다. 매개 변수에는 handler
복합 바인딩 체인의 각 속성에 대한 참조가 필요합니다.
아래 예제와 함께 단위 테스트에서 복합 바인딩의 추가 예제를 찾을 수 있습니다 CommunityToolkit.Maui.Markup
.
복합(중첩) 바인딩 예제
아래 ViewModel
클래스를 사용하여 매개 변수를 사용하는 데 직접 중첩된 양방향 바인딩을 ViewModel.NestedObject.Text
handlers
만들 수 있습니다.
new Entry().Bind(
Entry.TextProperty,
getter: static (ViewModel vm) => vm.NestedObject.Text,
handlers: new (Func<ViewModel, object?>, string)[]
{
(vm => vm, nameof(ViewModel.NestedObject)),
(vm => vm.NestedObject, nameof(ViewModel.NestedObject.Text)),
},
setter: static (ViewModel vm, string text) => vm.NestedObject.Text = text);
class ViewModel
{
public NestedObject NestedObject { get; set; } = new();
public required string Text { get; set; }
}
class NestedObject
{
public required string Text { get; set; }
}
기본 속성
바인딩을 설정할 속성을 지정하지 않고 메서드 Bind
를 호출할 수 있습니다. 그러면 GitHub 리포지토리의 전체 목록과 함께 라이브러리에서 제공하는 기본값을 활용합니다.
바인딩 Entry
할 기본 속성은 텍스트 속성입니다. 따라서 위의 예제를 다음과 같이 작성할 수 있습니다.
new Entry().Bind(nameof(ViewModel.RegistrationCode))
Warning
이 방법을 사용하면 일부 수준의 리플렉션이 사용되고 명시적 속성 접근 방식뿐만 아니라 수행되지 않습니다.
값 변환
이 Bind
메서드를 사용하면 개발자가 바인딩에서 사용하려는 항목을 제공 Converter
하거나 단순히 인라인 변환을 사용하는 메커니즘을 제공할 수 있습니다.
변환기
new Entry()
.Bind(Entry.TextProperty,
getter: static (RegistrationViewModel vm) => vm.RegistrationCode,
converter: new TextCaseConverter { Type = TextCaseType.Upper });
전체 사용량에 대한 설명서는 참조 TextCaseConverter
하세요.
인라인 변환
new Entry()
.Bind(Entry.TextProperty,
getter: static (RegistrationViewModel vm) => vm.RegistrationCode,
convert: (string? text) => text?.ToUpperInvariant());
여러 바인딩
를 활용하여 IMultiValueConverter
여러 바인딩을 함께 집계할 수 있습니다.
convert
매개 변수는 Func
여러 바인딩을 필요한 결과로 변환하는 데 필요한 매개 변수입니다.
new Label()
.Bind(Label.TextProperty,
binding1: new Binding(nameof(ViewModel.IsBusy)),
binding2: new Binding(nameof(ViewModel.LabelText)),
convert: ((bool IsBusy, string LabelText) values) => values.IsBusy ? string.Empty : values.LabelText)
BindCommand
이 메서드는 BindCommand
GitHub 리포지토리의 전체 목록을 사용하여 라이브러리에서 제공하는 기본값으로 바인딩을 구성하는 유용한 방법을 제공합니다.
바인딩 Button
할 기본 명령은 속성입니다 Command
. 따라서 다음 예제에서는 해당 속성에 대한 바인딩을 설정합니다.
new Button().BindCommand(static (ViewModel vm) => vm.SubmitCommand);
위의 내용은 다음과 같이 작성할 수도 있습니다.
참고 항목
기본 명령으로 인해 원하는 명령에 바인딩되지 않는 경우 이 메서드를 Bind
사용할 수 있습니다.
new Button()
.Bind(Entry.CommandProperty,
getter: static (RegistrationViewModel vm) => vm.SubmitCommand,
mode: BindingMode.OneTime);
제스처 바인딩
제스처 바인딩을 사용하면 ViewModel에서 ClickGestureRecognizer
구현하고 바인딩 ICommand
하는 모든 요소 IGestureRecognizer
에 연결하여 만듭니SwipeGestureRecognizer
TapGestureRecognizer
다.
BindClickGesture
다음 예제에서는 ViewModel에서 ClickGestureRecognizer
2
클릭을 활성화하고, 연결 Label
하고, ClickCommand라는 속성에 바인딩해야 하는 ICommand
항목을 만드는 방법을 보여 줍니다.
new Label()
.BindClickGesture(
static (ViewModel vm) => vm.ClickCommand,
commandBindingMode: BindingMode.OneTime,
numberOfClicksRequired: 2));
BindSwipeGesture
다음 예제에서는 해당 거리와 소수점 200포인트 거리에 Threshold
필요한 SwipeDirection
SwipeDirection.Up
항목을 만든 SwipeGestureRecognizer
다음, 해당 거리를 A Label
에 연결하고 ViewModel에서 SwipeCommand라는 속성에 바인딩하는 ICommand
방법을 보여 줍니다.
new Label()
.BindSwipeGesture(
static (ViewModel vm) => vm.SwipeCommand,
commandBindingMode: BindingMode.OneTime,
direction: SwipeDirection.Up,
threshold: 200);
BindTapGesture
다음 예제에서는 ViewModel에서 탭을 활성화하고, 연결 Label
하고, TapCommand라는 속성에 바인딩해야 하는 ICommand
탭을 만드는 ClickGestureRecognizer
2
방법을 보여 줍니다.
new Label()
.BindTapGesture(
static (ViewModel vm) => vm.TapCommand,
commandBindingMode: BindingMode.OneTime,
numberOfTapsRequired: 2));
AppThemeBinding
이 AppThemeBinding
메서드를 사용하면 애플리케이션 AppTheme
이 수정될 때 해당 테마에 BindableProperty
적절한 값이 사용되도록 밝고 어두운 값을 할당할 수 있습니다.
다음 예제에서는 애플리케이션이 밝은 테마에서 실행되는 경우 컨트롤의 Label
속성에 검은색 Text
을 할당하고 어두운 테마에서는 흰색을 할당합니다.
new Label().AppThemeBinding(Label.TextColorProperty, Colors.Black, Colors.White);
참고 항목
속성을 처리할 때 더 구체적인 메서드가 Color
있습니다. AppThemeColorBinding
는 동일한 기본 동작 AppThemeBinding
을 수행하지만 매개 변수 집합 Color
이 필요합니다.
자세한 내용은 테마 설명서를 참조하세요.
예제
.NET MAUI 커뮤니티 도구 키트 샘플 애플리케이션 전체에서 이러한 확장 메서드가 작동하는 예제를 찾을 수 있습니다.
API
확장 메서드에 대한 소스 코드는 BindableObject
.NET MAUI 커뮤니티 도구 키트 GitHub 리포지토리에서 찾을 수 있습니다.
.NET MAUI Community Toolkit
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기