|
Асинхронные команды и обновление UI
|
|||
---|---|---|---|
#18+
Доброго времени суток Имеется класс команды, реализующий ICommand, внутри него инкапсулирован BackgroundWorker и реализовано асинхронное выполнение команды. Во время асинхронного выполнения вызов ICommand.CanExecute() для этой команды возвращает false, чтобы ее нельзя было вызвать повторно. После выполнения асинхронного метода система, естественно, не вызывает ICommand.CanExecute(), и нужно самостоятельно обновить состояние зависящих от команды элементов управления. Вопрос: как инициировать вызовы CanExecute для всего UI и для отдельных элементов и как это делается по уму (т.е. чтобы не все элементы обновили свое состояние, а только те, которые подключены к данной команде)? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2010, 16:52 |
|
Асинхронные команды и обновление UI
|
|||
---|---|---|---|
#18+
JohnSparrow, создай маршрутизатор. который флагами отмечает, для каких контролов был уже запущен код. то что сча ты сделал, переделай без bw и запускай этот код ,через маршрутизатор. вставь многопоточность в маршрутизатор для одновременного запуска кода. и все. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2010, 18:03 |
|
Асинхронные команды и обновление UI
|
|||
---|---|---|---|
#18+
JohnSparrow Вопрос: как инициировать вызовы CanExecute для всего UI и для отдельных элементов и как это делается по уму (т.е. чтобы не все элементы обновили свое состояние, а только те, которые подключены к данной команде)? Для всего UI в базовом классе VM - RefreshCanExecuteCommands(). В частных случаях - через аттрибуты у свойств или методов а'la Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2010, 18:05 |
|
Асинхронные команды и обновление UI
|
|||
---|---|---|---|
#18+
В догонку. А BackgroundWorker в сад. В RX все делается гораздо проще ... |
|||
:
Нравится:
Не нравится:
|
|||
24.08.2010, 18:09 |
|
Асинхронные команды и обновление UI
|
|||
---|---|---|---|
#18+
AlexeiK, у меня несколько другая ситуация. Мне не нужно запоминать, из какого контрола запущен код (выполнение команды), мне нужно, чтобы все контролы, привязанные к данной команде, корректно обновились после ее асинхронного выполнения. Пример: есть окно, в нем набор вкладок модель главного окна - коллекция объектов Document (соответствующих вкладкам) у модели есть свойство ActiveDocument, соответствующее документу активной в данный момент вкладки в окне есть панель инструментов, на ней кнопка "Save", у которой Command={Binding Path=ActiveDocument.SaveCommand}. Команда асинхронная и Command.CanExecute возвращает false, если команда выполняется. В итоге после запуска кнопка становится неактивна, что правильно, но активной после асинхронного завершения SaveCommand.Execute не становится, что естественно, но плохо. Короче говоря, вызов CommandManager.InvalidateRequerySuggested() в нужном месте помог. От bw, действительно, придется отказаться, есть ряд моментов. i've WPF, по поводу обновления через атрибуты свойств. Речь идет о написании собственных атрибутов и анализе их при установке свойства, я верно понял? Т.е. в сеттере свойства я получаю перечень свойств, у которых есть атрибут ХХ с аргументом - названием данного свойства и для этих свойств генерирую NotifyPropertyChanged? За идею спасибо, пригодится, :) И за наводку на RX тоже спасибо, первая же статья по теме очень даже интересна. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2010, 01:53 |
|
Асинхронные команды и обновление UI
|
|||
---|---|---|---|
#18+
JohnSparrowi've WPF, по поводу обновления через атрибуты свойств. Речь идет о написании собственных атрибутов и анализе их при установке свойства, я верно понял? Т.е. в сеттере свойства я получаю перечень свойств, у которых есть атрибут ХХ с аргументом - названием данного свойства и для этих свойств генерирую NotifyPropertyChanged? За идею спасибо, пригодится, :) И за наводку на RX тоже спасибо, первая же статья по теме очень даже интересна. Правильно, но только не в сеттере, а в методе, который реализует INotifyPropertyChanged. Добавь свойство IsBusy, к нему делай привязку. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2010, 09:35 |
|
Асинхронные команды и обновление UI
|
|||
---|---|---|---|
#18+
Большое спасибо за уточнение. В самом деле, очень толковая идея. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.08.2010, 20:04 |
|
Асинхронные команды и обновление UI
|
|||
---|---|---|---|
#18+
i've WPFВ догонку. А BackgroundWorker в сад. В RX все делается гораздо проще' что за RX? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2011, 12:34 |
|
|
start [/forum/topic.php?fid=21&msg=36808931&tid=1442238]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 295ms |
total: | 426ms |
0 / 0 |