728x90
728x170
■ INotifyPropertyChanged 인터페이스에서 속성 값 변경 헬퍼 메소드를 사용하는 방법을 보여준다.
▶ 예제 코드 (C#)
using System.ComponentModel;
using System.Runtime.CompilerServices;
namespace TestProject;
/// <summary>
/// 사람 뷰 모델
/// </summary>
public class PersonViewModel : INotifyPropertyChanged
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Event
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 속성 변경시 - PropertyChanged
/// <summary>
/// 속성 변경시
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 성명
/// </summary>
private string name;
/// <summary>
/// 나이
/// </summary>
private double age;
/// <summary>
/// 기술
/// </summary>
private string skill;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 성명 - Name
/// <summary>
/// 성명
/// </summary>
public string Name
{
get
{
return this.name;
}
set
{
SetPropertyValue(ref this.name, value);
}
}
#endregion
#region 나이 - Age
/// <summary>
/// 나이
/// </summary>
public double Age
{
get
{
return this.age;
}
set
{
SetPropertyValue(ref this.age, value);
}
}
#endregion
#region 기술 - Skill
/// <summary>
/// 기술
/// </summary>
public string Skill
{
get
{
return this.skill;
}
set
{
SetPropertyValue(ref this.skill, value);
}
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 문자열 구하기 - ToString()
/// <summary>
/// 문자열 구하기
/// </summary>
/// <returns>문자열</returns>
public override string ToString()
{
return $"{Name}, {Age}세";
}
#endregion
////////////////////////////////////////////////////////////////////////////////////////// Protected
#region 속성 변경시 이벤트 발생시키기 - FirePropertyChangedEvent(propertyName)
/// <summary>
/// 속성 변경시 이벤트 발생시키기
/// </summary>
/// <param name="propertyName">속성명</param>
protected void FirePropertyChangedEvent([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 속성 값 설정하기 - SetPropertyValue<TProperty>(field, value, propertyName)
/// <summary>
/// 속성 값 설정하기
/// </summary>
/// <typeparam name="TProperty">속성 타입</typeparam>
/// <param name="field">필드</param>
/// <param name="value">값</param>
/// <param name="propertyName">속성명</param>
/// <returns>처리 결과</returns>
private bool SetPropertyValue<TProperty>(ref TProperty field, TProperty value, [CallerMemberName] string propertyName = null)
{
if(object.Equals(field, value))
{
return false;
}
field = value;
FirePropertyChangedEvent(propertyName);
return true;
}
#endregion
}
728x90
그리드형(광고전용)