CustomUtils Help

NotifyField

구현 코드 바로 가기

  • UIViewModel과 연동하여 동작 하도록 설계되었으며 각 Field의 값이 변경되면 ViewNotifyFieldChangedEventArgs를 발행하여 특정 Field가 변경돈 사실을 고지

  • UIViewModel내의 NotifyFieldUIViewModel이 생성될 때 자동 연동 되며 필요시 Event를 추가로 등록할 수 있음

public delegate void NotifyFieldChangedHandler(NotifyFieldChangedEventArgs args); public class NotifyFieldChangedEventArgs : EventArgs { public new static NotifyFieldChangedEventArgs Empty { get; } = new(); } public class NotifyCollectionChangedEventArgs : NotifyFieldChangedEventArgs { public readonly NotifyCollectionChangedAction action; public NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction action) => this.action = action; }
NotifyProperty
  • 일반 적인 Field 대한 반응형 Property

  • 참조 타입의 경우 IEqualityComparer<TValue> 구현 필요

NotifyCollection

  • 열거형(IEnumerable)을 구현하는 타입에 대한 통합 추상 클래스

  • NotifyProperty와는 다르게 Event를 통해 추가로 어떤 타입의 Action이 발생하였는지 알릴 필요성이 있음

NotifyCollection(TCollection, TValue)
  • Collection, NotifyList, NotifyDictionary에 기본 상속되며 열거형(IEnumerable)을 구현하는 타입에 대한 기초 추상화를 제공

NotifyCollection(TValue)
  • Collection 구조에 대한 반응형 Property

NotifyList
  • List 구조에 대한 반응형 Property

NotifyDictionary
  • Dictionary 구조에 대한 반응형 Property

public class SampleUIViewModel : UIViewModel { public readonly NotifyProperty<int> Count = new(); public void IncreaseCount(int count) => Count.Value += count; public void DecreaseCount(int count) => Count.Value -= count; } public class SampleUIView : UIView<SampleUIViewModel> { public void OnIncreaseInteraction(int count) => viewModel.IncreaseCount(count); public void OnDecreaseInteraction(int count) => viewModel.DecreaseCount(count); }
public class SampleUIViewModel : UIViewModel { public readonly NotifyCollection<int> Collection = new(); } public class SampleUIView : UIView<SampleUIViewModel> { public void AddCount(int count) => viewModel.Collection.Add(count); public void RemoveCount(int count) => viewModel.Collection.Remove(count); public void UpdateCollection() { foreach (var value in viewModel.Collection) { // Update Interface } } }
public class SampleUIViewModel : UIViewModel { public readonly NotifyList<int> List = new(); } public class SampleUIView : UIView<SampleUIViewModel> { public void AddCount(int count) => viewModel.List.Add(count); public void RemoveCount(int count) => viewModel.List.Remove(count); public void UpdateList() { foreach (var value in viewModel.List) { // Update Interface } } }
public class SampleUIViewModel : UIViewModel { public readonly NotifyDictionary<int, int> Dictionary = new(); } public class SampleUIView : UIView<SampleUIViewModel> { public void AddPair(int key, int value) => viewModel.Dictionary.Add(key, value); public void RemovePair(int key) => viewModel.Dictionary.Remove(key); public void UpdateDictionary() { foreach (var (key, value) in viewModel.Dictionary) { // Update Interface } } }
Last modified: 01 2월 2025