Информация об изменениях

Сообщение Re: Забиндить на результат асихронной операции от 04.09.2016 10:55

Изменено 04.09.2016 11:13 Qulac

Здравствуйте, ylem, Вы писали:

Y>WPF.

Y>Хочется забиндить элементы UI в WPF на результаты асинхронной операции.
Y>Типа, чтобы забиндил, UI не заблокировался, а когда операция выполнилась, значения в контролах появились.
Y>В идеале хочется, чтобы операция возвращала сложную структуру (класс), и несколько контролов биндились на разные свойства этого класса.
Y>Ко всему этому хочется простой способ отобразить в UI, что, типа еще считается (с анимацией если совсем просто, или без).

Y>Есть какой-нибудь более или менее конвеншенал способ это делать?


Y>Первое, что приходит в голову, это объект из ViewModel создать "сразу", а когда данные появятся пусть объект кидает PropertyChanged.

Y>Еще нагуглил вот, но не уверен, на сколько это можно тащить в продашкен-код.

1. Делаем в вьюшке свойство типа object — это свойство будет устанавливаться стразу перед началом длительной операции.
2. Делаем два шаблона данных, один — для типа object, второй для вашей сложной структуры в виде класса. Первый шаблон будет показываться во время выполнения операции, что типа прогрес-полосы, тут ваша фантазия.
3. В форму добавляем Label, биндим контент Label на свойство вьюшки и указываем шаблоны данных.

Работает это все так: вьюшка сразу возвращает пустой объект, затем после выполнения объект нужного класса, в label автоматом в зависимости от типа будет подставляться нужный шаблон с контролами.
Здравствуйте, ylem, Вы писали:

Y>WPF.

Y>Хочется забиндить элементы UI в WPF на результаты асинхронной операции.
Y>Типа, чтобы забиндил, UI не заблокировался, а когда операция выполнилась, значения в контролах появились.
Y>В идеале хочется, чтобы операция возвращала сложную структуру (класс), и несколько контролов биндились на разные свойства этого класса.
Y>Ко всему этому хочется простой способ отобразить в UI, что, типа еще считается (с анимацией если совсем просто, или без).

Y>Есть какой-нибудь более или менее конвеншенал способ это делать?


Y>Первое, что приходит в голову, это объект из ViewModel создать "сразу", а когда данные появятся пусть объект кидает PropertyChanged.

Y>Еще нагуглил вот, но не уверен, на сколько это можно тащить в продашкен-код.

1. Делаем в viewModel свойство типа object — это свойство будет устанавливаться стразу перед началом длительной операции.
2. Делаем два шаблона данных, один — для типа object, второй для вашей сложной структуры в виде класса. Первый шаблон будет показываться во время выполнения операции, что типа прогрес-полосы, тут ваша фантазия, второй — отображать вашу структуры данных.
3. В форму добавляем Label, биндим контент Label на свойство viewModel и указываем шаблоны данных.

Работает это все так: вьюшка сразу возвращает пустой объект, затем после выполнения объект нужного класса, в label автоматом в зависимости от типа будет подставляться нужный шаблон с контролами.