Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > WPF и Silverlight > Как найти шаблон за пределами корневого элемента |
Автор: dzaraev 27.2.2013, 13:09 | ||||||
Мне нужно создать примитивную инфраструктуру для открытия окон. Поэтому необходимо создать окно, умеющее показывать любой объект. Независимо от того, программно или через XAML задается окно, я сталкиваюсь с принципиальной проблемой автоматического поиска шаблона, для отображения содержимого. Например, есть окно:
Соответственно, есть код, который создает и настраивает окно на отображение определенного объекта:
И где-то недалеко в XAML лежит типизированный шаблон:
Проблема в том, что данный ContentPresenter не сможет найти указанный типизированный шаблон через дерево элементов, т.к. Window.Parent == null. Единственный вариант, который я вижу - это помещать такие шаблоны в ресурсы приложения (туда поиск конечно дойдет), но это неприемлемо, т.к. существуют разные представления для разных случаев. Буду рад любым идеям ![]() |
Автор: Flap 28.2.2013, 08:15 | ||||
я у себя в проекте сделал простое окно с фреймом:
И теперь, когда мне надо показать в нем что-то другое, делаю что-то типа такого:
В данном случае, ProjectView - это страница WPF. В твоем случае, у тебя будет некое стандартное окно с фреймом. А класс, который ты передашь в это окно, будет иметь ссылку на свою вьюху. |
Автор: Flap 1.3.2013, 15:01 | ||
Для вызова диалога из ViewModel обычно используют некий интерфейс IDialogService. Экземпляр объекта, реализующий этот диалог, передают в конструктор ViewModel. Примерно так:
|
Автор: dzaraev 1.3.2013, 16:12 |
Сегодня реализовал подобную схему, только не передавая диалог в модель, а через сервис(синглтон). Несмотря на то, что синглтоны я не люблю, более легкого в поддержке и чистого решения я не нашел. Передавать интерфейс в конструкторе - слишком накладно, т.к. с ним начинают связываться даже те ViewModel классы, которым он не нужен (чтобы обеспечить инфраструктуру), а это в свою очередь - больше неоправданных зависимостей. По сабжу - ответ скорее всего таков - никак. Т.к. окно - корневой элемент и фреймворк шлет на фиг при попытке сделать его чьим-нибудь чайлдом :( Все равно спасибо за участие, тему считаю закрытой. ![]() |
Автор: Flap 1.3.2013, 16:49 |
>>По сабжу - ответ скорее всего таков - никак. Т.к. окно - корневой элемент и фреймворк шлет на фиг при попытке сделать его чьим-нибудь чайлдом :( По этому поводу я написал в первом свое сообщении. Размести на главном окне Frame и пихай туда Page. Page на такую манипуляцию реагирует нормально. |
Автор: dzaraev 1.3.2013, 18:03 | ||
эта манипуляция открывает новое окно? мне нужны отдельные окна |