ProjectDDD/Assets/_DDD/_Scripts/GameUi/BaseUi/BaseViewModelUi.cs
2025-08-21 16:44:47 +09:00

74 lines
1.9 KiB
C#

namespace DDD
{
public class BaseViewModelUi<TViewModel> : BaseUi where TViewModel : SimpleViewModel
{
protected TViewModel _viewModel;
protected override void Awake()
{
base.Awake();
_viewModel = GetComponent<TViewModel>();
}
protected override void OnEnable()
{
base.OnEnable();
if (_viewModel && _bindingContext != null)
{
_bindingContext.SetDataContext(_viewModel);
_viewModel.PropertyChanged += OnViewModelPropertyChanged;
}
}
protected override void OnDisable()
{
base.OnDisable();
if (_viewModel != null)
{
_viewModel.PropertyChanged -= OnViewModelPropertyChanged;
}
}
public override void OpenPanel()
{
base.OpenPanel();
_viewModel?.Initialize();
}
public override void ClosePanel()
{
base.ClosePanel();
_viewModel?.Cleanup();
}
/// <summary>
/// ViewModel 메서드 호출 헬퍼
/// </summary>
protected void InvokeViewModelMethod(string methodName, params object[] parameters)
{
if (_viewModel == null) return;
var method = _viewModel.GetType().GetMethod(methodName);
method?.Invoke(_viewModel, parameters);
}
/// <summary>
/// ViewModel 속성 설정 헬퍼
/// </summary>
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);
}
}
}
}