2017-02-20 8 views
1

У меня есть RelayCommand, привязываться к AppBarButton, как:COMException в RaiseCanExecuteChanged на UWP

Command="{Binding NextCommand, UpdateSourceTrigger=PropertyChanged}" 

CanExecute свойство данной команды является только простая проверка нулевой.

private bool CanExecuteNextCommand() => !(this.SelectedItem == null); 

Но, если RaiseCanExecuteChanged вызывается (через триггер) быстро, несколько раз, то здесь:

CanExecuteChanged?.Invoke(this, EventArgs.Empty); 

я получаю следующее исключение:

«Ошибка HRESULT E_FAIL был возвращен от вызова к COM-компоненту ».

Если я удаляю привязку свойства Command из представления, она работает.

Я даже попытался добавить Task.Delay (200), прежде чем поднять CanExecuteChangeds при запуске, но я получаю то же исключение.

Кто-нибудь сталкивался с чем-то подобным в UWP?

+0

Не уверен, что проблема была в вашем собственном коде. Каков триггер? Пожалуйста, поделитесь с нами [mcve]. –

+0

Я не вижу причин, по которым вы бы поставили 'UpdateSourceTrigger = PropertyChanged' на привязку команды! Обычно команда никогда не изменяется (но ничто не мешает вам иметь логику внутри метода выполнения команды!) –

ответ

0

В соответствии с этим:https://social.msdn.microsoft.com/Forums/sqlserver/en-US/cfa7416c-435f-4f4b-9ad0-2b290b4ee978/w81-windows-81-app-working-properly-in-windows-81-throws-comexception-0x80004005-when-it-is?forum=wpdevelop

У меня такая же ситуация, команда это CanExecuteChanged собирается начать ссылаться не на одних и тех же взглядов, что и текущий вид один на экране.

В качестве решения: Я просто положил CanExecuteChanged? .Invoke (this, EventArgs.Empty); в попытке с пустым блоком catch для COMException:

catch(System.Runtime.InteropServices.COMException ex) { } 
Смежные вопросы