![]() |
Модераторы: gambit, Kefir, Partizan |
![]() ![]() ![]() |
|
dzaraev |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 12.1.2013 Репутация: нет Всего: 1 |
Мне нужно создать примитивную инфраструктуру для открытия окон. Поэтому необходимо создать окно, умеющее показывать любой объект.
Независимо от того, программно или через XAML задается окно, я сталкиваюсь с принципиальной проблемой автоматического поиска шаблона, для отображения содержимого. Например, есть окно:
Соответственно, есть код, который создает и настраивает окно на отображение определенного объекта:
И где-то недалеко в XAML лежит типизированный шаблон:
Проблема в том, что данный ContentPresenter не сможет найти указанный типизированный шаблон через дерево элементов, т.к. Window.Parent == null. Единственный вариант, который я вижу - это помещать такие шаблоны в ресурсы приложения (туда поиск конечно дойдет), но это неприемлемо, т.к. существуют разные представления для разных случаев. Буду рад любым идеям ![]() --------------------
Если вопрос решён - помечайте тему. |
||||||
|
|||||||
Flap |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 16.11.2005 Репутация: нет Всего: нет |
я у себя в проекте сделал простое окно с фреймом:
И теперь, когда мне надо показать в нем что-то другое, делаю что-то типа такого:
В данном случае, ProjectView - это страница WPF. В твоем случае, у тебя будет некое стандартное окно с фреймом. А класс, который ты передашь в это окно, будет иметь ссылку на свою вьюху. Это сообщение отредактировал(а) Flap - 28.2.2013, 08:17 |
||||
|
|||||
dzaraev |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 12.1.2013 Репутация: нет Всего: 1 |
У меня приложение строится по шаблону MVVM, диалог с пользователем инициируется на уровне ViewModel, а в описанном тобой случае работа происходит на уровне View. Чтобы открывать окна из View необходимо использовать события или мессенджинг между View и ViewModel - это возможно в MVVM, но крайне неудобно и громоздко при большом количестве диалогов, вызываемых в разных местах. :( --------------------
Если вопрос решён - помечайте тему. |
|||
|
||||
Flap |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 16.11.2005 Репутация: нет Всего: нет |
Для вызова диалога из ViewModel обычно используют некий интерфейс IDialogService. Экземпляр объекта, реализующий этот диалог, передают в конструктор ViewModel.
Примерно так:
|
|||
|
||||
dzaraev |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 12.1.2013 Репутация: нет Всего: 1 |
Сегодня реализовал подобную схему, только не передавая диалог в модель, а через сервис(синглтон). Несмотря на то, что синглтоны я не люблю, более легкого в поддержке и чистого решения я не нашел. Передавать интерфейс в конструкторе - слишком накладно, т.к. с ним начинают связываться даже те ViewModel классы, которым он не нужен (чтобы обеспечить инфраструктуру), а это в свою очередь - больше неоправданных зависимостей.
По сабжу - ответ скорее всего таков - никак. Т.к. окно - корневой элемент и фреймворк шлет на фиг при попытке сделать его чьим-нибудь чайлдом :( Все равно спасибо за участие, тему считаю закрытой. ![]() --------------------
Если вопрос решён - помечайте тему. |
|||
|
||||
Flap |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 16.11.2005 Репутация: нет Всего: нет |
>>По сабжу - ответ скорее всего таков - никак. Т.к. окно - корневой элемент и фреймворк шлет на фиг при попытке сделать его чьим-нибудь чайлдом :(
По этому поводу я написал в первом свое сообщении. Размести на главном окне Frame и пихай туда Page. Page на такую манипуляцию реагирует нормально. |
|||
|
||||
dzaraev |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 12.1.2013 Репутация: нет Всего: 1 |
эта манипуляция открывает новое окно? мне нужны отдельные окна --------------------
Если вопрос решён - помечайте тему. |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |