UIκ° μλ μ€λ λμμ μλ¦Ό λ³κ²½ μ¬νμ λ°μμν€λ μμ±μμ UI λ°μΈλ©μ΄ λ°μνλλ‘ νμ©
μμ±μ λ°μΈλ©ν λ νμ UI μ€λ λμμ μμ± λ³κ²½ μλ¦Όμ λ°μμμΌμΌ ν©λλ€. κ·Έλ μ§ μμΌλ©΄ λ°νμ μμΈκ° λ°μν©λλ€. μ΄λ‘ μΈν΄ UIκ° λ·° λͺ¨λΈ λ° λͺ¨λΈλ‘ νλ¬λ€μ΄κ° μ μ ν μ€λ λλ₯Ό μ¬λ¦΄ μ μμΌλ―λ‘ .NET Standard λΌμ΄λΈλ¬λ¦¬μμ INPCλ₯Ό μ¬μ©ν μ μκ² λ©λλ€(bait'n'switchμ λ€μ΄κ°κ³ μΆμ§ μμ κ²½μ°). .
λν ν νλ μ λμ μμ±μ΄ μ¬λ¬ λ² λ³κ²½λ μ μμΌλ―λ‘ μ€μ λ‘ νμν κ²λ³΄λ€ ν¨μ¬ λ λ§μ΄ UI μ€λ λλ‘ μ΄λν μ μμ΅λλ€(νμν λͺ¨λ κ²μ μμ±μ "λν°"λ‘ νλκ·Έ μ§μ νκ³ λ€μ λ λ ν¨μ€.
μ΄ λͺ¨λ κ²μ μ½λ 볡μ‘μ±μ ν¬κ² μ¦κ°μν€κ³ μ€λ₯κ° λ°μνκΈ° μ½μ΅λλ€.
λν WinUI 3.0μμ λ¬Έμ κ° λ°μν©λλ€. μ΄μ Legacy UWPμ WinUI μ€λ λμ λ κ°μ§ UI μ€λ λκ° μκΈ° λλ¬Έμ λλ€. μ΄λ κ²μ μ¬λ €μΌ ν©λκΉ?
μ€λ λ© λ¬Έμ λ λ¬Όλ‘ μ ν¨νμ§λ§ κ²°κ΅ μ΄κ²μ΄ μ€μ λ‘ λ¬Έμ λΌκ³ μκ°νμ§ μμ΅λλ€. λ§μ§λ§ μ΄λ²€νΈλ§ μ€μνλ―λ‘ UI ββμ
λ°μ΄νΈ μ μ μ¬λ¬ INPC μ΄λ²€νΈκ° λ°μνλ κ²μ μ€μνμ§ μμ΅λλ€. μ΄λ UI μ€λ λλ‘ μ¬λ¬ λ² μ ννλ κΈ°μ‘΄ μ½λμ λ€λ₯΄μ§ μμ΅λλ€. 첫 λ²μ§Έ νλͺ©μ΄ UI μ€λ λλ‘ μ νλλ©΄ μμ±μ΄ μ΄λ―Έ μ¬λ¬ λ² μ
λ°μ΄νΈλμ΄ λ§μ§λ§ νλͺ©μ΄ μΉλ¦¬ν μ μμ΅λλ€.
λΉμ°ν κ°μ μ½μ λ λν° νλκ·Έκ° μ€μ λλ κ²μ λ°©μ§νλ 짧μ μ κΈμ΄ νμνλ―λ‘ μμ±μ΄ μ½λ κ²κ³Ό λμμ μ
λ°μ΄νΈλλ κ²½μ° λ€μ νλ μμμ λ λ²μ§Έ UI μ
λ°μ΄νΈκ° λ°μν©λλ€.
μ€μ λ‘ μΈμ€ν΄μ€μ κ°μ΄ falseμμ trueλ‘, λ€μ falseλ‘ λ³κ²½λλ©΄ Dependency Propertyλ μ΄λ―Έ κ°μ΄ λ³κ²½λμ§ μμμμ κ°μ§ν λ§νΌ μΆ©λΆν λλνκ³ μμ±μΌλ‘ μΈν΄ μ λ λλ§ ν¨μ€λ₯Ό μΌμΌν€μ§ μμμΌλ‘μ¨ μ΅μ νν μ μμ΅λλ€. λ³νμ§ μλ.
μ΄κ²μ λ§€μ° νλΉν μ°λ €μ λλ€. μ κΈ°ν΄ μ£Όμ μ κ°μ¬ν©λλ€. νλ μμν¬μμ DPμ λν μ€λ λ μ νΈλ μ§μμ ν° λ¬Έμ κ° μλ μ μμ§λ§ INPC ꡬνμμκ²λ λ§€μ° μ’μ μ μμ΅λλ€.
μΌλΆ μ½λκ° UIκ° μλ μ€λ λμμ μμ± λ³κ²½μ μΌμΌν¬ μ μλ κ²½μ° μμ±μ μ§μ μ½λκ° λ°±κ·ΈλΌμ΄λ μ€λ λμμ λ³κ²½λ μ μμμ μλ―Έν©λλ€. μ κΈμ μ¬μ©νμ¬ λ³΄νΈν μ μμ§λ§ μλ°©ν₯ λ°μΈλ©μ μμ± λ³κ²½ 체μΈμ κ΅μ°© μνλ‘ λ§λ€ μ μμΌλ―λ‘ λ¬Έμ κ° λ μ μμ΅λλ€.
λν INPCμ κ°μ₯ ν° λ¬Έμ λ μ΄λ²€νΈκ° λ°μνμ λ "νμ¬" κ°μ΄ μλ€λ κ²μ
λλ€. μμ±μ΄ μ λλ‘ λκΈ°νλμ§ μκ±°λ(μ: SelectedIndex
λ° ItemsSource
κ° λκΈ°μ μΌλ‘ μ
λ°μ΄νΈλμ§ μκ³ SelectedIndex
κ°μ΄ μμ€λ¨) μμ± μν(μ: TextBox λ³κ²½ λ° μ κ·μ νν°).
κ·Έλ¬λ©΄ μ 체 컬λ μ μ μ μ νκ² λ³΄νΈν΄μΌ νλ INCCμ λ¬Έμ κ° λ°μν©λλ€. μλ₯Ό λ€μ΄, μ΄λλμκ±°λ λ μ΄μ μ‘΄μ¬νμ§ μλ νλͺ©μ μ°Έμ‘°νλ μ΄λ²€νΈλ₯Ό λ°μμν¬ μ μμ΅λλ€.
μ΄ λ¬Έμ μ λν ν΄κ²°μ± μ΄ μλ€κ³ λ§νλ κ²μ μλμ§λ§(νμ€ν μμ) IPNC μμ κΈ° μ€λ λ© μ νΈλ λ³κ²½μ μΈν°νμ΄μ€μ μμͺ½ λμμ μ΄ λ¬Έμ λ₯Ό μ½κ² λ§λ€κΈ°μ μΆ©λΆνμ§ μμ΅λλ€.
WPFλ μ΄κ²μ μμ λμΌλ―λ‘ μλ§λ κ±°κΈ°μμ μ루μ μ κ°μ Έ μ€κ² μ΅λκΉ?
μ’μ μ μμ λλ€. μ°λ¦¬λ CollectionChanged μ΄λ²€νΈμ λν΄ μ΄ μμ μ μνν©λλ€(μ½κ° μ°μ°ν...). NotifyPropertyChangedμ λν΄μλ λμΌν μμ μ μνν μ μμ΄μΌ ν©λλ€.
κ°μ₯ μ μ©ν λκΈ
μ΄κ²μ λ§€μ° νλΉν μ°λ €μ λλ€. μ κΈ°ν΄ μ£Όμ μ κ°μ¬ν©λλ€. νλ μμν¬μμ DPμ λν μ€λ λ μ νΈλ μ§μμ ν° λ¬Έμ κ° μλ μ μμ§λ§ INPC ꡬνμμκ²λ λ§€μ° μ’μ μ μμ΅λλ€.
μΌλΆ μ½λκ° UIκ° μλ μ€λ λμμ μμ± λ³κ²½μ μΌμΌν¬ μ μλ κ²½μ° μμ±μ μ§μ μ½λκ° λ°±κ·ΈλΌμ΄λ μ€λ λμμ λ³κ²½λ μ μμμ μλ―Έν©λλ€. μ κΈμ μ¬μ©νμ¬ λ³΄νΈν μ μμ§λ§ μλ°©ν₯ λ°μΈλ©μ μμ± λ³κ²½ 체μΈμ κ΅μ°© μνλ‘ λ§λ€ μ μμΌλ―λ‘ λ¬Έμ κ° λ μ μμ΅λλ€.
λν INPCμ κ°μ₯ ν° λ¬Έμ λ μ΄λ²€νΈκ° λ°μνμ λ "νμ¬" κ°μ΄ μλ€λ κ²μ λλ€. μμ±μ΄ μ λλ‘ λκΈ°νλμ§ μκ±°λ(μ:
SelectedIndex
λ°ItemsSource
κ° λκΈ°μ μΌλ‘ μ λ°μ΄νΈλμ§ μκ³SelectedIndex
κ°μ΄ μμ€λ¨) μμ± μν(μ: TextBox λ³κ²½ λ° μ κ·μ νν°).κ·Έλ¬λ©΄ μ 체 컬λ μ μ μ μ νκ² λ³΄νΈν΄μΌ νλ INCCμ λ¬Έμ κ° λ°μν©λλ€. μλ₯Ό λ€μ΄, μ΄λλμκ±°λ λ μ΄μ μ‘΄μ¬νμ§ μλ νλͺ©μ μ°Έμ‘°νλ μ΄λ²€νΈλ₯Ό λ°μμν¬ μ μμ΅λλ€.
μ΄ λ¬Έμ μ λν ν΄κ²°μ± μ΄ μλ€κ³ λ§νλ κ²μ μλμ§λ§(νμ€ν μμ) IPNC μμ κΈ° μ€λ λ© μ νΈλ λ³κ²½μ μΈν°νμ΄μ€μ μμͺ½ λμμ μ΄ λ¬Έμ λ₯Ό μ½κ² λ§λ€κΈ°μ μΆ©λΆνμ§ μμ΅λλ€.