Лучший способ реализовать временные оверлеи в MVVM - PullRequest
2 голосов
/ 13 января 2012

Я пишу приложение, которое подключается к сетевым ресурсам.

Когда приложение подключается, я хочу, чтобы всплыло наложение с обычным графическим индикатором прогресса и кнопкой отмены.Я разработал ConnectProgressViewModel и соответствующий ConnectProgressView для наложения.

Мой вопрос: какой самый чистый способ показать / скрыть наложение от родительской ViewModel?

A) Предоставьте константу ConnectProgressViewModel из моего родительского ViewModel, и пусть ConnectProgressView связывает ее видимость со свойством ConnectProgressViewModel.IsConnecting.

B) Предоставление универсального Overlay свойство из родительского ViewModel, и установите его в ConnectProgressViewModel, когда пользователь хочет подключиться.Родительское представление привязывает ContentControl к этому свойству Overlay, а шаблоны данных заботятся об остальном.

C) ?

Первое, кажется, инкапсулируетфункциональность больше, приложение не должно заботиться о том, чтобы показывать и скрывать наложение, а постоянно выставлять константу ConnectProgressViewModel, когда кажется, что показывается только время от времени.

Второе, кажется, лучше подходит для MVVM сConnectProgressViewModel создается только тогда, когда это необходимо, но добавляет родительской функции больше функциональности, а также общее свойство Overlay также выглядит немного странно.

Cheers

EDIT:

Я должен уточнить, что это представление делает больше, чем просто показывает состояние занятости.Это позволяет отменять / повторять попытки и выбирать различные сетевые ресурсы и т. Д. Я для краткости опускаю такие детали, что, возможно, было ошибкой, поскольку люди концентрируются на индикаторе занятости.

Ответы [ 2 ]

1 голос
/ 13 января 2012

Я хотел бы пойти с чем-то вроде вашего предложения в А) и утверждать, что вы не должны реализовывать что-то общее, такое как В), пока у вас не появится такая степень гибкости как требование, например, возможность показывать различные виды наложения.

Будьте проще!

1 голос
/ 13 января 2012

Я всегда просто использую BusyIndicator из набора инструментов Silverlight.У него нет кнопки отмены, но вы, вероятно, можете сделать так, чтобы она была у вас.У BusyIndicator есть свойство IsBusy, которое я связываю со свойством IsBusy в моей ViewModel.Если вы стилизуете элемент управления, чтобы иметь кнопку, вы можете добавить команду отмены в вашу ViewModel.

Редактировать

Я только что увидел, что это WPF, а не Silverlight.Я не уверен, есть ли в WPF Toolkit BusyIndicator

Редактировать еще раз

Похоже, Extended WPF Toolkit имеет BusyIndicator.Обратите внимание, у меня нет опыта с этим.

...