0

Добрый вечер. Возник такой вопрос каким образом можно реализовать открытие дочернего окна SecondView из родительского FirstView и с привязанным к данному типу окна передать SecondViewModel этого окна, а так же передать какие либо параметры из родительской MainViewModel в дочернее и при закрытии отправить обратно в родительское MainViewModel.

KJfe
  • 123
  • Слышал что надо использовать Services, но не уверен что данный подход является наилучшим. Может не прав. – KJfe Nov 13 '17 at 14:06
  • KJfe прав. Следует использовать сервисы. Если будет время вечером расскажу подробнее. – MihailPw Nov 13 '17 at 14:10
  • 1
  • 1
    Вот что мне не нравиться во всякого рода паттернах так это возникающее на их основе фанатичные и бестолковые, с точки зрения рациональности, надуманные ограничения, которые ведут в свою очередь к бесполезным и сложным решениям. Яркими примерами коих как раз и есть эти тонны бесполезного кода ссылки на которые дали в своих комментах @tym32167 и VladD. – Bulson Nov 13 '17 at 15:27
  • Сперва я создавал дочернее окно с помощью создания экземпляра View и привязки к нему экземпляр ViewModelчерезDataContextт.е. вMainViewModel` срабатывал метод открытия нового окна и происходило SecondView secondView = new SecondView(); secondView = new SecondViewModel(); seconViewModel.ShowDialog(); но была проблема передачи данных во внутрь и обратно как вариант можно было бы через делегат перекидывать. – KJfe Nov 13 '17 at 15:32
  • Создайте интерфейс с объявлением метода, с помощью которого вы будете открывать дочер.окна. Реализуйте метод в кодбихайнд главного окна, параметр этого метода можно сделать enum. В методе будете сначала создавать инстанс вьюмодели, затем переменным вьюмодели будете передавать данные, дальше создаете инстанс дочернего окна, далее делаете привязку вьюмодели к DataContext окна, далее показываете дочернее окно. Во вьюмодель через его конструктор будете передавать экз. глав. окна, через тип интерфейса. Т. образом из вьюмодели глав.окна можно вызывать метод для показа дочер.окна. – Bulson Nov 13 '17 at 15:42
  • @Bulson Я скинул ссылку на похожий вопрос. Если вы видите, как улучшить те ответы - улучшайте. А про ограничения я не понял. Паттерны существуют, чтобы решать конкретные задачи. Если они задачи не решают - значит они не подходят в текущей ситуации. Если решают - то подходят. – tym32167 Nov 13 '17 at 15:43
  • 1
    @tym32167 все так. Но, вот касательно MVVM самым ярким примером, того о чем я говорил это сентенции вроде этой: "кодбихайнд не должно быть не строчки кода, все нужно делать только через привязки, конвертеры, команды, поведения.". Слепое следование этому ограничению ведет к тоннам и тоннам бесполезного кода, когда эта же проблема порой решается парой строк в кодбихайнд, но ведь это нельзя! Это преступно! Вот о чем я. – Bulson Nov 13 '17 at 15:51
  • @Bulson так это не про паттерны совсем. Есть такое, когда для хелловорлда вкручивают PRISM - это типичная проблема. Также часто видишь, когда одну и ту же вещь в большом проекте реализуют 100500 способами (кому как удобно), а все от того, что не было гайдлайнов как это делать, так и плодится портянка лапшеговнокода. И потом садишься и смотришь, как умники реализовали свой тред пул, который используется через раз, а джуны нахреначили стили прямо в страницы xaml копипастой, и все они уже уволились, а тебе это поддерживать. – tym32167 Nov 13 '17 at 15:59
  • @tym32167 ага! Значит и вы наступали в это г.... :) Я уже здесь как то отвечал на подобный вопрос, только там было про переключение страниц во фрейме, а не вызов окон, но это практически похоже. Автор вопроса, как в прочем большинство здесь, почему-то не воспользовался поиском по сайту. – Bulson Nov 13 '17 at 16:08
  • @Bulson Я в это не просто наступал, я в этом плавал на подлодке, почитывая Фаулера и гайдлайны :) – tym32167 Nov 13 '17 at 16:19

0 Answers0