Получить объект времени выполнения, назначенный свойству интерфейса, чтобы выполнить метод для этого объекта. - PullRequest
0 голосов
/ 11 октября 2018

У меня есть несколько реализаций 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)
        {
        }
    }
}
...