namespace DDD { public class BaseViewModelUi : BaseUi where TViewModel : SimpleViewModel { protected TViewModel _viewModel; protected override void Awake() { base.Awake(); _viewModel = GetComponent(); } protected override void OnOpenedEvents() { base.OnOpenedEvents(); if (_viewModel && _bindingContext != null) { _bindingContext.SetDataContext(_viewModel); _viewModel.PropertyChanged += OnViewModelPropertyChanged; } } protected override void OnClosedEvents() { base.OnClosedEvents(); if (_viewModel != null) { _viewModel.PropertyChanged -= OnViewModelPropertyChanged; } } public override void OpenPanel() { base.OpenPanel(); _viewModel?.Initialize(); } public override void ClosePanel() { base.ClosePanel(); _viewModel?.Cleanup(); } /// /// ViewModel 메서드 호출 헬퍼 /// protected void InvokeViewModelMethod(string methodName, params object[] parameters) { if (_viewModel == null) return; var method = _viewModel.GetType().GetMethod(methodName); method?.Invoke(_viewModel, parameters); } /// /// ViewModel 속성 설정 헬퍼 /// protected void SetViewModelProperty(string propertyName, object value) { if (_viewModel == null) return; var property = _viewModel.GetType().GetProperty(propertyName); if (property != null && property.CanWrite) { property.SetValue(_viewModel, value); } } } }