Microsoft-ui-xaml: μ œμ•ˆ: Auto-dispatch 속성이 UI μŠ€λ ˆλ“œμ— 이벀트λ₯Ό λ³€κ²½ν–ˆμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2019λ…„ 05μ›” 17일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: microsoft/microsoft-ui-xaml

μš”μ•½

UIκ°€ μ•„λ‹Œ μŠ€λ ˆλ“œμ—μ„œ μ•Œλ¦Ό λ³€κ²½ 사항을 λ°œμƒμ‹œν‚€λŠ” μ†μ„±μ—μ„œ UI 바인딩이 λ°œμƒν•˜λ„λ‘ ν—ˆμš©

이둠적 해석

속성을 바인딩할 λ•Œ 항상 UI μŠ€λ ˆλ“œμ—μ„œ 속성 λ³€κ²½ μ•Œλ¦Όμ„ λ°œμƒμ‹œμΌœμ•Ό ν•©λ‹ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄ λŸ°νƒ€μž„ μ˜ˆμ™Έκ°€ λ°œμƒν•©λ‹ˆλ‹€. 이둜 인해 UIκ°€ λ·° λͺ¨λΈ 및 λͺ¨λΈλ‘œ ν˜λŸ¬λ“€μ–΄κ°€ μ μ ˆν•œ μŠ€λ ˆλ“œλ₯Ό 올릴 수 μžˆμœΌλ―€λ‘œ .NET Standard λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ INPCλ₯Ό μ‚¬μš©ν•  수 μ—†κ²Œ λ©λ‹ˆλ‹€(bait'n'switch에 λ“€μ–΄κ°€κ³  싢지 μ•Šμ€ 경우). .

λ˜ν•œ ν•œ ν”„λ ˆμž„ λ™μ•ˆ 속성이 μ—¬λŸ¬ 번 변경될 수 μžˆμœΌλ―€λ‘œ μ‹€μ œλ‘œ ν•„μš”ν•œ 것보닀 훨씬 더 많이 UI μŠ€λ ˆλ“œλ‘œ 이동할 수 μžˆμŠ΅λ‹ˆλ‹€(ν•„μš”ν•œ λͺ¨λ“  것은 속성을 "더티"둜 ν”Œλž˜κ·Έ μ§€μ •ν•˜κ³  λ‹€μŒ λ Œλ” 패슀.

이 λͺ¨λ“  것은 μ½”λ“œ λ³΅μž‘μ„±μ„ 크게 μ¦κ°€μ‹œν‚€κ³  였λ₯˜κ°€ λ°œμƒν•˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€.

λ˜ν•œ WinUI 3.0μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€. 이제 Legacy UWP와 WinUI μŠ€λ ˆλ“œμ˜ 두 가지 UI μŠ€λ ˆλ“œκ°€ 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. μ–΄λŠ 것을 μ˜¬λ €μ•Ό ν•©λ‹ˆκΉŒ?

λ²”μœ„

  • λͺ¨λ“  μŠ€λ ˆλ“œμ—μ„œ INotifyPropertyChanged 및 INotifyCollectionChangedλ₯Ό λ°œμƒμ‹œν‚¬ 수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
  • ν”„λ ˆμž„μ„ μ—¬λŸ¬ 번 μ €λ ΄ν•˜κ²Œ μˆ˜ν–‰ν•  수 μžˆμ–΄μ•Ό ν•˜μ§€λ§Œ 단일 μ—…λ°μ΄νŠΈλ§Œ νŠΈλ¦¬κ±°ν•©λ‹ˆλ‹€(λ§ˆμ§€λ§‰ μ—…λ°μ΄νŠΈκ°€ 승리).
  • UIλ₯Ό μ—…λ°μ΄νŠΈν•˜κΈ° μœ„ν•΄ μ½λŠ” λ™μ•ˆ μ„€μ •λ˜λŠ” 속성을 μ²˜λ¦¬ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
  • 이미 UI μŠ€λ ˆλ“œμ— μžˆλŠ” 경우 UI μŠ€λ ˆλ“œλ‘œμ˜ μ „ν™˜μ„ λ°©μ§€ν•©λ‹ˆλ‹€.

μ€‘μš” μ°Έκ³  사항

μŠ€λ ˆλ”© λ¬Έμ œλŠ” λ¬Όλ‘  μœ νš¨ν•˜μ§€λ§Œ κ²°κ΅­ 이것이 μ‹€μ œλ‘œ 문제라고 μƒκ°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ§ˆμ§€λ§‰ 이벀트만 μ€‘μš”ν•˜λ―€λ‘œ UI β€‹β€‹μ—…λ°μ΄νŠΈ 전에 μ—¬λŸ¬ INPC μ΄λ²€νŠΈκ°€ λ°œμƒν•˜λŠ” 것은 μ€‘μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ΄λŠ” UI μŠ€λ ˆλ“œλ‘œ μ—¬λŸ¬ 번 μ „ν™˜ν•˜λŠ” κΈ°μ‘΄ μ½”λ“œμ™€ λ‹€λ₯΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 첫 번째 ν•­λͺ©μ΄ UI μŠ€λ ˆλ“œλ‘œ μ „ν™˜λ˜λ©΄ 속성이 이미 μ—¬λŸ¬ 번 μ—…λ°μ΄νŠΈλ˜μ–΄ λ§ˆμ§€λ§‰ ν•­λͺ©μ΄ μŠΉλ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
λ‹Ήμ—°νžˆ 값을 읽을 λ•Œ 더티 ν”Œλž˜κ·Έκ°€ μ„€μ •λ˜λŠ” 것을 λ°©μ§€ν•˜λŠ” 짧은 잠금이 ν•„μš”ν•˜λ―€λ‘œ 속성이 μ½λŠ” 것과 λ™μ‹œμ— μ—…λ°μ΄νŠΈλ˜λŠ” 경우 λ‹€μŒ ν”„λ ˆμž„μ—μ„œ 두 번째 UI μ—…λ°μ΄νŠΈκ°€ λ°œμƒν•©λ‹ˆλ‹€.
μ‹€μ œλ‘œ μΈμŠ€ν„΄μŠ€μ˜ 값이 falseμ—μ„œ true둜, λ‹€μ‹œ false둜 λ³€κ²½λ˜λ©΄ Dependency PropertyλŠ” 이미 값이 λ³€κ²½λ˜μ§€ μ•Šμ•˜μŒμ„ 감지할 만큼 μΆ©λΆ„νžˆ λ˜‘λ˜‘ν•˜κ³  μ†μ„±μœΌλ‘œ 인해 μƒˆ λ Œλ”λ§ 패슀λ₯Ό μΌμœΌν‚€μ§€ μ•ŠμŒμœΌλ‘œμ¨ μ΅œμ ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ³€ν•˜μ§€ μ•ŠλŠ”.

feature proposal team-Markup

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

이것은 맀우 νƒ€λ‹Ήν•œ μš°λ €μž…λ‹ˆλ‹€. μ œκΈ°ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. ν”„λ ˆμž„μ›Œν¬μ—μ„œ DP에 λŒ€ν•œ μŠ€λ ˆλ“œ μ„ ν˜Έλ„ 지원은 큰 λ¬Έμ œκ°€ 아닐 수 μžˆμ§€λ§Œ INPC κ΅¬ν˜„μžμ—κ²ŒλŠ” 맀우 쒋을 수 μžˆμŠ΅λ‹ˆλ‹€.

일뢀 μ½”λ“œκ°€ UIκ°€ μ•„λ‹Œ μŠ€λ ˆλ“œμ—μ„œ 속성 변경을 μΌμœΌν‚¬ 수 μžˆλŠ” 경우 μ†μ„±μ˜ 지원 μ½”λ“œκ°€ λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œμ—μ„œ 변경될 수 μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€. μž κΈˆμ„ μ‚¬μš©ν•˜μ—¬ λ³΄ν˜Έν•  수 μžˆμ§€λ§Œ μ–‘λ°©ν–₯ 바인딩은 속성 λ³€κ²½ 체인을 ꡐ착 μƒνƒœλ‘œ λ§Œλ“€ 수 μžˆμœΌλ―€λ‘œ λ¬Έμ œκ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ INPC의 κ°€μž₯ 큰 λ¬Έμ œλŠ” μ΄λ²€νŠΈκ°€ λ°œμƒν–ˆμ„ λ•Œ "ν˜„μž¬" 값이 μ—†λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 속성이 μ œλŒ€λ‘œ λ™κΈ°ν™”λ˜μ§€ μ•Šκ±°λ‚˜(예: SelectedIndex 및 ItemsSource κ°€ λ™κΈ°μ μœΌλ‘œ μ—…λ°μ΄νŠΈλ˜μ§€ μ•Šκ³  SelectedIndex 값이 손싀됨) 속성 μƒνƒœ(예: TextBox λ³€κ²½ 및 μ •κ·œμ‹ ν•„ν„°).

그러면 전체 μ»¬λ ‰μ…˜μ„ μ μ ˆν•˜κ²Œ λ³΄ν˜Έν•΄μ•Ό ν•˜λŠ” INCC에 λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ΄λ™λ˜μ—ˆκ±°λ‚˜ 더 이상 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” ν•­λͺ©μ„ μ°Έμ‘°ν•˜λŠ” 이벀트λ₯Ό λ°œμƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

이 λ¬Έμ œμ— λŒ€ν•œ 해결책이 μ—†λ‹€κ³  λ§ν•˜λŠ” 것은 μ•„λ‹ˆμ§€λ§Œ(ν™•μ‹€νžˆ 있음) IPNC μˆ˜μ‹ κΈ° μŠ€λ ˆλ”© μ„ ν˜Έλ„ 변경은 μΈν„°νŽ˜μ΄μŠ€μ˜ μ–‘μͺ½ λμ—μ„œ 이 문제λ₯Ό μ‰½κ²Œ λ§Œλ“€κΈ°μ— μΆ©λΆ„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  3 λŒ“κΈ€

이것은 맀우 νƒ€λ‹Ήν•œ μš°λ €μž…λ‹ˆλ‹€. μ œκΈ°ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. ν”„λ ˆμž„μ›Œν¬μ—μ„œ DP에 λŒ€ν•œ μŠ€λ ˆλ“œ μ„ ν˜Έλ„ 지원은 큰 λ¬Έμ œκ°€ 아닐 수 μžˆμ§€λ§Œ INPC κ΅¬ν˜„μžμ—κ²ŒλŠ” 맀우 쒋을 수 μžˆμŠ΅λ‹ˆλ‹€.

일뢀 μ½”λ“œκ°€ UIκ°€ μ•„λ‹Œ μŠ€λ ˆλ“œμ—μ„œ 속성 변경을 μΌμœΌν‚¬ 수 μžˆλŠ” 경우 μ†μ„±μ˜ 지원 μ½”λ“œκ°€ λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œμ—μ„œ 변경될 수 μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€. μž κΈˆμ„ μ‚¬μš©ν•˜μ—¬ λ³΄ν˜Έν•  수 μžˆμ§€λ§Œ μ–‘λ°©ν–₯ 바인딩은 속성 λ³€κ²½ 체인을 ꡐ착 μƒνƒœλ‘œ λ§Œλ“€ 수 μžˆμœΌλ―€λ‘œ λ¬Έμ œκ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ INPC의 κ°€μž₯ 큰 λ¬Έμ œλŠ” μ΄λ²€νŠΈκ°€ λ°œμƒν–ˆμ„ λ•Œ "ν˜„μž¬" 값이 μ—†λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 속성이 μ œλŒ€λ‘œ λ™κΈ°ν™”λ˜μ§€ μ•Šκ±°λ‚˜(예: SelectedIndex 및 ItemsSource κ°€ λ™κΈ°μ μœΌλ‘œ μ—…λ°μ΄νŠΈλ˜μ§€ μ•Šκ³  SelectedIndex 값이 손싀됨) 속성 μƒνƒœ(예: TextBox λ³€κ²½ 및 μ •κ·œμ‹ ν•„ν„°).

그러면 전체 μ»¬λ ‰μ…˜μ„ μ μ ˆν•˜κ²Œ λ³΄ν˜Έν•΄μ•Ό ν•˜λŠ” INCC에 λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ΄λ™λ˜μ—ˆκ±°λ‚˜ 더 이상 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” ν•­λͺ©μ„ μ°Έμ‘°ν•˜λŠ” 이벀트λ₯Ό λ°œμƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

이 λ¬Έμ œμ— λŒ€ν•œ 해결책이 μ—†λ‹€κ³  λ§ν•˜λŠ” 것은 μ•„λ‹ˆμ§€λ§Œ(ν™•μ‹€νžˆ 있음) IPNC μˆ˜μ‹ κΈ° μŠ€λ ˆλ”© μ„ ν˜Έλ„ 변경은 μΈν„°νŽ˜μ΄μŠ€μ˜ μ–‘μͺ½ λμ—μ„œ 이 문제λ₯Ό μ‰½κ²Œ λ§Œλ“€κΈ°μ— μΆ©λΆ„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

WPFλŠ” 이것을 μ•Œμ•„ λƒˆμœΌλ―€λ‘œ μ•„λ§ˆλ„ κ±°κΈ°μ—μ„œ μ†”λ£¨μ…˜μ„ κ°€μ Έ μ˜€κ² μŠ΅λ‹ˆκΉŒ?

쒋은 μ œμ•ˆμž…λ‹ˆλ‹€. μš°λ¦¬λŠ” CollectionChanged μ΄λ²€νŠΈμ— λŒ€ν•΄ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€(μ•½κ°„ μš°μ—°νžˆ...). NotifyPropertyChanged에 λŒ€ν•΄μ„œλ„ λ™μΌν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰