Re: Вызов ICommand.CanExecuteChanged из потока
От: MxMsk Португалия  
Дата: 24.05.11 06:35
Оценка:
Здравствуйте, Ed.ward, Вы писали:

EW>Собвственно вопрос, почему привязка свойства работает, а привязка команды нет?

Привязка то работает в обоих случаях. Binding отвечает только за связь со свойством, а не за использование свойства. В обоих случаях связь устанавливается. Другое дело, что кнопка, при присваивании команды, подписывается на ее событие CanExecuteChanged. Откуда эта команда пришла — через Binding или через local value — кнопку не волнует. В обработчике CanExecuteChanged вызывается корректировка свойства IsEnabled, при которой происходит вызов VerifyAccess, что приводит к исключению.

EW>И как сделать, чтобы и с командой всё работало так же как и со свойством?

Несколько вариантов:
  1. Написать команду, которая будет вызывать CanExecuteChanged через Application.Current.Dispatcher.
  2. Сделать аналогичное, но в модели. Менять доступность команды через Application.Current.Dispatcher.
  3. В свойстве, которое возвращает команду, запоминать SynchronizationContext.Current и менять доступность команды через этот SynchronizationContext.

если не подходит, можно придумать еще
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.