Re[2]: [WPF] События от ViewModel к View
От: Fortnum  
Дата: 21.10.10 12:08
Оценка:
Здравствуйте, Codechanger, Вы писали:

C>Сценарий подобного события приведите, пожалуйста.


Много можно привести примеров по тому принципу, что один View не знает ничего о другом, но их ViewModel'и знают. Например, имеем во View1 компонент WebBrowser. Этим View1 управляет ModelView1. Есть View2 с управлением навигацией, под ним ModelView2, который имеет ссылку на ModelView1. View2 о View1, естественно, ничего не знает (более того, они даже в разных окнах и не могут друг другу кинуть мессагу в любом случае даже если очень захотеть), то есть все управление проходит по уровню ModelView (ModelView2 -> ModelView1). Как ModelView1 будет управлять навигация WebBrowser'а во View1?

Также еще возможны такие примеры, где ModelView получает побуждение к действию от внешних сил, например от WCF- или COM-клиента. Проблема аналогичная. Если у ModelView меняется какой-нибудь property или коллекция — нет проблем, на помощь приходит биндинг INotifyPropertyChanged + INotifyCollectionChanged. Но что если во View надо вызвать какой-нибудь метод или поднять Routed Event в управляемом им View, чтобы этот RoutedEvent пошел по маршруту по дереву, например выше, в другой View, куда этот View более низкого уровня включен?

Короче, я представляю себе горизонтальные связи на двух уровнях — View и ViewModel. На уровне View эти связи решаются путем RoutedEvents, но не всегда возможны (разъдиненные деревья), либо просто неудобны (маршруты эти такая бяка, и out-of-box их нет, писать надо), чем на уровне ModelView, где это происходит простым удержанием взаимных ссылок, в т.ч. подпиской на события. Все это хорошо работает, но в параллельных плоскостях. От View к ModelView сигналы хорошо ходят через команды. А вот обратная сторона от ModelView к View почему-то создается такое впечатление, что всеми игнорируется (книги, статьи и т.п.).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.