Ждите событий от ребенка objects/viewmodels

Я строю приложение WinRT/WP8, используя Крест MVVM, и одно из требований для пользователя, чтобы быть в состоянии загрузить изображения. Насколько главное приложение затронуто, "картина" - просто массив байтов с некоторыми метаданными - куда это на самом деле прибыло из, не ни один из, он - бизнес. То, что я имею тогда (до сих пор для WinRT, еще не осуществили телефон вообще), является интерфейсом "IPictureSource" с методом GetBytes и 2 внедрениями - LivePicture и FileSystem. Каждый делает то, что это должно сделать, чтобы брать/находить изображение и возвращает его в требуемом формате.

Приложение немного неуклюжее в данный момент, когда слой UI вдыхает функции устройств, и только позволяет файловую систему, если камера не доступна

То, что я хочу сделать, абстрактно они немного, возможно имейте двух детей viewmodels, один посвященный к камере (который позволяет себя при наличии), и один для файловой системы, или возможно даже коллекции, если у устройства есть больше чем одна камера, чтобы дать пользователю максимальный выбор.

Так или иначе я хочу иметь дизайн, посредством чего у меня есть многократные источники для картины, которые все способны к возвращению соответствующих данных.

В былые времена я выставил бы событие "PictureTaken" на IPictureSource и цикл через дочерние объекты от родителя, зарегистрировал бы каждое событие и обработал бы их через общего укладчика.

Я не вижу, почему это все еще не работало бы, но поскольку у меня есть немного комнаты дыхания, чтобы максимально использовать новые технологии (особенно async/await), там теперь лучший способ сделать это, особенно один я мог тест единицы?

1
nl ja de

1 ответы

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

3
добавлено
Вы используете композитора как MEF? Это может произойти что вы нижний индекс к накопителю от VM' s конструктор. Я всегда получал это, когда я хотел снова использовать VM, но он иллюстрировался примерами каждый раз, я просто хотел к , повторно активируют его. Относительно MEF решение состояло в том, чтобы поместить стратегический признак создания части как это: [PartCreationPolicy (CreationPolicy. Разделенный)] . Вместо того, чтобы установить его CreationPolicy. NonShared .
добавлено автор Michael Schnerring, источник
Я думаю, что самая важная часть, что необходимо отличаться между этими двумя случаями: 1. , Если вы идете назад и вперед между двумя различными VM' s/views, но государство их сохранен, это означает, что вы повторно активируете их. Таким образом, необходимо получить случай, вы уже создали на первое посещение этого VM/view. 2. , Если вам действительно нравится создавать новые, вы также, иллюстрируют примерами их каждый раз, вы идете назад или дальше. Если вы иллюстрируете примерами их каждый раз, вы на самом деле хотите к , повторно активируют его, вы создаете огромный amout VM' s. И причины большая ловля событий, зависящая от того, сколько времени приложение бежало.
добавлено автор Michael Schnerring, источник
хм, таким образом, образец The Observer снова тогда, очевидно, сегодня вечером выступая как Накопитель Событий. Спасибо, я думаю, что у Креста MVVM есть класс Messenger, но I' ve, не замеченный это в действии. Взглянуть теперь...
добавлено автор TobyEvans, источник
да - that' s, как сделать это. There' s послушный класс посыльного PCL в Кресте MVVM. Я, действительно кажется, получаю многократные подписки на том же самом viewmodel (that' s перезагруженный несколько раз). Я подозреваю, что Единичный предмет будет необходимым теперь где-нибудь, но I' m определенно идущий в правильном направлении теперь. Спасибо
добавлено автор TobyEvans, источник
эй - не верный that' s на самом деле собирающийся быть проблемой в реальном применении, я просто бросил некоторый код вместе, чтобы видеть, работало ли это в принципе. У меня был один VM, который подписался на сообщение в его конструкторе и другой VM, который издал. Я пошел назад и вперед несколько раз, таким образом, новый отзыв был добавлен каждый раз к messagehub. Когда сообщение было издано, оно пошло ко всем подписчикам, т.е. отзывы определили каждый раз, когда HomeVM был создан. Но этот isn' t реальный путь I' ll использовать его в реальном приложении, it' ll быть передачей сообщений от неизвестного числа ребенка VMs родителю...
добавлено автор TobyEvans, источник
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot