powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF: Псевдо-tabbed-MDI и Page
16 сообщений из 16, страница 1 из 1
WPF: Псевдо-tabbed-MDI и Page
    #38999113
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(WPF в процессе изучения)

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

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

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

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


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

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

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

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

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

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

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


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