Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF: Псевдо-tabbed-MDI и Page / 16 сообщений из 16, страница 1 из 1
03.07.2015, 15:52
    #38999113
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Псевдо-tabbed-MDI и Page
(WPF в процессе изучения)

Хочу сделать приложение, в котором есть несколько независимых друг от друга форм. И чтобы пользователь при этом мог переключаться между ними в произвольном порядке в едином окне приложения.

Как бы, TabControl сделает мне визуально то, что я хочу, но есть еще два пожелания.

1) Каждая форма на каждой закладке может быть достаточно непростой, кроме того, ее содержимое во многом будет забиндено на БД, не хотелось бы ее грузить при запуске приложения, чтобы и не забивать визуальное дерево и не ждать загрузки из базы. Пользователь может даже и не воспользоваться какой-то формой в текущем сеансе работы.

2) Формы достаточно автономны, то есть хотелось бы разрабатывать их независимо (то есть иметь отдельные XAML-ы, а не валить всю разметку и код в общую кучу)


Соответственно, идея такая - на главной форме разместить TabControl, на каждой закладке пустой Frame, сами формы реализовать в виде Page, как только пользователь первый раз щелкает на очередную закладку - загружать ему нужную страницу во Frame.

Годный способ или так себе?
...
Рейтинг: 0 / 0
06.07.2015, 12:04
    #39000379
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Псевдо-tabbed-MDI и Page
Обнаружил, что при переключении вкладок в уже загруженной странице повторно возникает событие Loaded.

С какого? Страница однократно загружена в Frame, никакой навигации я с ней не делаю, Page.KeepAlive=true, так откуда же оно берется?
...
Рейтинг: 0 / 0
06.07.2015, 12:18
    #39000398
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Псевдо-tabbed-MDI и Page
Shocker.ProС какого?Содержимое страницы удаляется/помещается в визуальное дерево при переключении страниц.
...
Рейтинг: 0 / 0
06.07.2015, 12:25
    #39000410
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Псевдо-tabbed-MDI и Page
Алексей КСодержимое страницы удаляется/помещается в визуальное дерево при переключении страниц.При переключении вкладок, ты хотел сказать? Ясно, хотя тогда не очень становится понятен смысл события Loaded, мне нужно событие для отработки инициализации страницы, где визуальное дерево уже готово (то есть Initialized не подойдет), а оно тут, понимаешь, возникает когда попало. Не, ну решается простым флагом конечно, но неприятно.

Что-то остальные молчат, тебе-то как этот подход в принципе?
...
Рейтинг: 0 / 0
06.07.2015, 12:38
    #39000423
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Псевдо-tabbed-MDI и Page
Shocker.Pro,

скорее всего дело в том, что Loaded маршрутизируемое и когда возникает во Frame'е, то всплывает до формы.
Выход 1, где то между формой и фреймом, поставить Handler, который будет блокировать это событие.
...
Рейтинг: 0 / 0
06.07.2015, 12:39
    #39000425
@k@DElpher
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Псевдо-tabbed-MDI и Page
...
Рейтинг: 0 / 0
06.07.2015, 12:43
    #39000436
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Псевдо-tabbed-MDI и Page
Roman Mejtesскорее всего дело в том, что Loaded маршрутизируемое и когда возникает во Frame'е, то всплывает до формы.
Выход 1, где то между формой и фреймом, поставить Handler, который будет блокировать это событие.Я вроде смотрел первичный источник события - он был Page. Ладно, поэкспериментирую со всплытием, спасибо.
...
Рейтинг: 0 / 0
06.07.2015, 12:47
    #39000444
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Псевдо-tabbed-MDI и Page
@k@DElpherГляньте Prism
http://habrahabr.ru/post/176851/ спасибо, на будущее полезноPrism предназначено для разработчиков WPF, или Silverlight приложений с многочисленными экранами, расширенным взаимодействием с пользователем, визуализацией данных, и со сложным взаимодействие представлений и бизнес логики. Эти приложения обычно взаимодействуют с многочисленными back-end системами и службами и, используя многоуровневую архитектуру, могут быть физически развернуты на нескольких уровнях. Ожидается, что приложение будет существенно развиваться за время его жизни, в ответ на новые требования бизнеса. Короче говоря, это приложения построенные надолго и для изменений. Приложения, которым не требуются эти характеристики, могут не извлечь выгоды от использования Prism. но пока что явно рановато в моем случае ))
...
Рейтинг: 0 / 0
06.07.2015, 13:33
    #39000504
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Псевдо-tabbed-MDI и Page
Shocker.ProАлексей КСодержимое страницы удаляется/помещается в визуальное дерево при переключении страниц.При переключении вкладок, ты хотел сказать?Да.
Shocker.ProЯсно, хотя тогда не очень становится понятен смысл события Loaded, мне нужно событие для отработки инициализации страницы, где визуальное дерево уже готово (то есть Initialized не подойдет), а оно тут, понимаешь, возникает когда попало.Ну почему же, оно возникает при помещении элемента в визуальное дерево, в том числе и при повторном помещении. В пару к нему есть событие Unloaded.
Shocker.ProНе, ну решается простым флагом конечно, но неприятно.Да. Чтобы не захламлять прикладной код можно сделать присоединяемое поведение, вроде этого :
Код: c#
1.
myControl.GetUiDataLifetime().Opening += WsConnectionDialog_Opening;

Shocker.ProЧто-то остальные молчат, тебе-то как этот подход в принципе?Я решил не брать за основу TabControl, остановился на таком решении.
...
Рейтинг: 0 / 0
06.07.2015, 13:34
    #39000505
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Псевдо-tabbed-MDI и Page
@k@DElpherГляньте Prism
http://habrahabr.ru/post/176851/ И чем же Prism тут поможет?
...
Рейтинг: 0 / 0
06.07.2015, 13:58
    #39000530
@k@DElpher
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Псевдо-tabbed-MDI и Page
Алексей К@k@DElpherГляньте Prism
http://habrahabr.ru/post/176851/ И чем же Prism тут поможет?
Ну конкретно с Loaded ничем. Идеология в целом и я его вспомнил из-за:
Shocker.Pro Пользователь может даже и не воспользоваться какой-то формой в текущем сеансе работы.
...
Рейтинг: 0 / 0
06.07.2015, 14:35
    #39000566
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Псевдо-tabbed-MDI и Page
@k@DElpherАлексей Кпропущено...
И чем же Prism тут поможет?
Ну конкретно с Loaded ничем. Идеология в целом и я его вспомнил из-за:
Shocker.Pro Пользователь может даже и не воспользоваться какой-то формой в текущем сеансе работы.Банальный Lazy<T>
...
Рейтинг: 0 / 0
06.07.2015, 14:42
    #39000572
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Псевдо-tabbed-MDI и Page
И как в Lazy<T> обернуть всю форму вместе с XAML-ом и codebehind-ом?
Не стоит эту мою фразу выдергивать из контекста. Решать эту задачу отдельно от всего остального, изложенного в первом посте, бессмысленно )
...
Рейтинг: 0 / 0
06.07.2015, 17:16
    #39000755
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Псевдо-tabbed-MDI и Page
Shocker.ProИ как в Lazy<T> обернуть всю форму вместе с XAML-ом и codebehind-ом?
Не стоит эту мою фразу выдергивать из контекста. Решать эту задачу отдельно от всего остального, изложенного в первом посте, бессмысленно )Lazy<MyUserControl> ?

Ну это что касается ленивой инициализации. Просто я не понял, накой тут Призм.
...
Рейтинг: 0 / 0
06.07.2015, 18:25
    #39000835
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Псевдо-tabbed-MDI и Page
А зачем делать её Lazy? они будут загружаться только тогда, когда будут запрошены.
например пока Popup окно еще не открыто, её содержимое не загружено.
просто интересно, зачем оборачивать в Lazy и что
...
Рейтинг: 0 / 0
07.07.2015, 04:24
    #39001004
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Псевдо-tabbed-MDI и Page
Roman MejtesА зачем делать её Lazy? они будут загружаться только тогда, когда будут запрошены.
например пока Popup окно еще не открыто, её содержимое не загружено.
просто интересно, зачем оборачивать в Lazy и что Тут коллега предложил использовать Призм для ленивой инициализации контролов. Я просто предложил Lazy<T> в качестве банальной альтернативы. Я в курсе, что и без Lazy<T> способов ленивой инициализации не мало.
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF: Псевдо-tabbed-MDI и Page / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]