[C#/MAUI/.NET6] BindableProperty 클래스 : CreateAttached 정적 메소드를 사용해 첨부 속성 만들기
C#/MAUI 2022. 3. 8. 14:31728x90
반응형
728x170
▶ NumericValidationBehavior.cs
namespace TestProject;
/// <summary>
/// 숫자 검증 동작
/// </summary>
public static class NumericValidationBehavior
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Bindable Property
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 검증 적용 여부 속성 - ApplyValidationProperty
/// <summary>
/// 검증 적용 여부 속성
/// </summary>
public static readonly BindableProperty ApplyValidationProperty = BindableProperty.CreateAttached
(
"ApplyValidation",
typeof(bool),
typeof(NumericValidationBehavior),
false,
propertyChanged : ApplyValidationPropertyChangedCallback
);
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 검증 적용 여부 구하기 - GetApplyValidation(bo)
/// <summary>
/// 검증 적용 여부 구하기
/// </summary>
/// <param name="bo">바인딩 객체</param>
/// <returns>검증 적용 여부</returns>
public static bool GetApplyValidation(BindableObject bo)
{
return (bool)bo.GetValue(ApplyValidationProperty);
}
#endregion
#region 검증 적용 여부 설정하기 - SetApplyValidation(bo, value)
/// <summary>
/// 검증 적용 여부 설정하기
/// </summary>
/// <param name="bo">바인딩 객체</param>
/// <param name="value">검증 적용 여부</param>
public static void SetApplyValidation(BindableObject bo, bool value)
{
bo.SetValue(ApplyValidationProperty, value);
}
#endregion
//////////////////////////////////////////////////////////////////////////////// Private
#region 검증 적용 여부 속성 변경시 콜백 처리하기 - ApplyValidationPropertyChangedCallback(bo, previousValue, newValue)
/// <summary>
/// 검증 적용 여부 속성 변경시 콜백 처리하기
/// </summary>
/// <param name="bo">바인딩 객체</param>
/// <param name="previousValue">이전 값</param>
/// <param name="newValue">신규 값</param>
private static void ApplyValidationPropertyChangedCallback(BindableObject bo, object previousValue, object newValue)
{
Entry entry = bo as Entry;
if(entry == null)
{
return;
}
bool applyValidation = (bool)newValue;
if(applyValidation)
{
entry.TextChanged += entry_TextChanged;
}
else
{
entry.TextChanged -= entry_TextChanged;
}
}
#endregion
#region 엔트리 텍스트 변경시 처리하기 - entry_TextChanged(sender, e)
/// <summary>
/// 엔트리 텍스트 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private static void entry_TextChanged(object sender, TextChangedEventArgs e)
{
double result;
bool isValid = double.TryParse(e.NewTextValue, out result);
((Entry)sender).TextColor = isValid ? Colors.Black : Colors.Red;
}
#endregion
}
728x90
▶ MainPage.xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage x:Class="TestProject.MainPage"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:TestProject">
<Entry
HorizontalOptions="Center"
VerticalOptions="Center"
WidthRequest="200"
local:NumericValidationBehavior.ApplyValidation="true"
Placeholder="실수 값을 입력해 주시기 바랍니다." />
</ContentPage>
728x90
반응형
그리드형(광고전용)
댓글을 달아 주세요