У меня есть несколько реализаций ICommand в моих ViewModels.Я хочу создать метод, который получит все свойства «ICommand» из моей ViewModel, а затем вызовет метод «CanExecute», чтобы обновить состояние всех моих командных кнопок.
private ICommand _commandInsert;
public ICommand CommandInsert { get { if (_commandInsert == null) { _commandInsert = new RelayCommand<object>(async (parameter) => await InsertCallBack(parameter), c => true); } return _commandInsert; } }
затем при различных событиях, таких какперезагрузка моей коллекции или изменение статуса соединения я звоню:
//TODO: get this stupid thing working!
public override void UpdateCanExecute()
{
//the foreach and property query works fine, i can see all the ICommand properties but can never get the value
foreach (PropertyInfo prop in this.GetType().GetProperties().Where(p => typeof(ICommand).IsAssignableFrom(p.PropertyType) && p.PropertyType.Name == "ICommand"))
{
try
{
//tried a every different variation to get the value from the ICommand property and get so many random errors
//I have all the ICommand properties and I need to cast them to my RelayCommand and then call the RaiseCanExecute method
//I hate my life and myself because I can't get this to work
//!!!this is what i'm trying to accomplish!!!
ICommand cmd = (ICommand)prop.GetValue(prop, null);
RelayCommand<object> rly = (RelayCommand<object>)cmd;
rly?.RaiseCanExecuteChanged();
}
catch (Exception e)
{
}
}
}