NotifyField
UIViewModel
과 연동하여 동작 하도록 설계되었으며 각Field
의 값이 변경되면View
에NotifyFieldChangedEventArgs
를 발행하여 특정Field
가 변경돈 사실을 고지UIViewModel
내의NotifyField
는UIViewModel
이 생성될 때 자동 연동 되며 필요시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