첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170
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
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요