|
WPF: Псевдо-tabbed-MDI и Page
|
|||
---|---|---|---|
#18+
(WPF в процессе изучения) Хочу сделать приложение, в котором есть несколько независимых друг от друга форм. И чтобы пользователь при этом мог переключаться между ними в произвольном порядке в едином окне приложения. Как бы, TabControl сделает мне визуально то, что я хочу, но есть еще два пожелания. 1) Каждая форма на каждой закладке может быть достаточно непростой, кроме того, ее содержимое во многом будет забиндено на БД, не хотелось бы ее грузить при запуске приложения, чтобы и не забивать визуальное дерево и не ждать загрузки из базы. Пользователь может даже и не воспользоваться какой-то формой в текущем сеансе работы. 2) Формы достаточно автономны, то есть хотелось бы разрабатывать их независимо (то есть иметь отдельные XAML-ы, а не валить всю разметку и код в общую кучу) Соответственно, идея такая - на главной форме разместить TabControl, на каждой закладке пустой Frame, сами формы реализовать в виде Page, как только пользователь первый раз щелкает на очередную закладку - загружать ему нужную страницу во Frame. Годный способ или так себе? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2015, 15:52 |
|
WPF: Псевдо-tabbed-MDI и Page
|
|||
---|---|---|---|
#18+
Обнаружил, что при переключении вкладок в уже загруженной странице повторно возникает событие Loaded. С какого? Страница однократно загружена в Frame, никакой навигации я с ней не делаю, Page.KeepAlive=true, так откуда же оно берется? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2015, 12:04 |
|
WPF: Псевдо-tabbed-MDI и Page
|
|||
---|---|---|---|
#18+
Shocker.ProС какого?Содержимое страницы удаляется/помещается в визуальное дерево при переключении страниц. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2015, 12:18 |
|
WPF: Псевдо-tabbed-MDI и Page
|
|||
---|---|---|---|
#18+
Алексей КСодержимое страницы удаляется/помещается в визуальное дерево при переключении страниц.При переключении вкладок, ты хотел сказать? Ясно, хотя тогда не очень становится понятен смысл события Loaded, мне нужно событие для отработки инициализации страницы, где визуальное дерево уже готово (то есть Initialized не подойдет), а оно тут, понимаешь, возникает когда попало. Не, ну решается простым флагом конечно, но неприятно. Что-то остальные молчат, тебе-то как этот подход в принципе? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2015, 12:25 |
|
WPF: Псевдо-tabbed-MDI и Page
|
|||
---|---|---|---|
#18+
Shocker.Pro, скорее всего дело в том, что Loaded маршрутизируемое и когда возникает во Frame'е, то всплывает до формы. Выход 1, где то между формой и фреймом, поставить Handler, который будет блокировать это событие. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2015, 12:38 |
|
WPF: Псевдо-tabbed-MDI и Page
|
|||
---|---|---|---|
#18+
Гляньте Prism http://habrahabr.ru/post/176851/ ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2015, 12:39 |
|
WPF: Псевдо-tabbed-MDI и Page
|
|||
---|---|---|---|
#18+
Roman Mejtesскорее всего дело в том, что Loaded маршрутизируемое и когда возникает во Frame'е, то всплывает до формы. Выход 1, где то между формой и фреймом, поставить Handler, который будет блокировать это событие.Я вроде смотрел первичный источник события - он был Page. Ладно, поэкспериментирую со всплытием, спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2015, 12:43 |
|
WPF: Псевдо-tabbed-MDI и Page
|
|||
---|---|---|---|
#18+
@k@DElpherГляньте Prism http://habrahabr.ru/post/176851/ спасибо, на будущее полезноPrism предназначено для разработчиков WPF, или Silverlight приложений с многочисленными экранами, расширенным взаимодействием с пользователем, визуализацией данных, и со сложным взаимодействие представлений и бизнес логики. Эти приложения обычно взаимодействуют с многочисленными back-end системами и службами и, используя многоуровневую архитектуру, могут быть физически развернуты на нескольких уровнях. Ожидается, что приложение будет существенно развиваться за время его жизни, в ответ на новые требования бизнеса. Короче говоря, это приложения построенные надолго и для изменений. Приложения, которым не требуются эти характеристики, могут не извлечь выгоды от использования Prism. но пока что явно рановато в моем случае )) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2015, 12:47 |
|
WPF: Псевдо-tabbed-MDI и Page
|
|||
---|---|---|---|
#18+
Shocker.ProАлексей КСодержимое страницы удаляется/помещается в визуальное дерево при переключении страниц.При переключении вкладок, ты хотел сказать?Да. Shocker.ProЯсно, хотя тогда не очень становится понятен смысл события Loaded, мне нужно событие для отработки инициализации страницы, где визуальное дерево уже готово (то есть Initialized не подойдет), а оно тут, понимаешь, возникает когда попало.Ну почему же, оно возникает при помещении элемента в визуальное дерево, в том числе и при повторном помещении. В пару к нему есть событие Unloaded. Shocker.ProНе, ну решается простым флагом конечно, но неприятно.Да. Чтобы не захламлять прикладной код можно сделать присоединяемое поведение, вроде этого : Код: c# 1.
Shocker.ProЧто-то остальные молчат, тебе-то как этот подход в принципе?Я решил не брать за основу TabControl, остановился на таком решении. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2015, 13:33 |
|
WPF: Псевдо-tabbed-MDI и Page
|
|||
---|---|---|---|
#18+
Алексей К@k@DElpherГляньте Prism http://habrahabr.ru/post/176851/ И чем же Prism тут поможет? Ну конкретно с Loaded ничем. Идеология в целом и я его вспомнил из-за: Shocker.Pro Пользователь может даже и не воспользоваться какой-то формой в текущем сеансе работы. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2015, 13:58 |
|
WPF: Псевдо-tabbed-MDI и Page
|
|||
---|---|---|---|
#18+
@k@DElpherАлексей Кпропущено... И чем же Prism тут поможет? Ну конкретно с Loaded ничем. Идеология в целом и я его вспомнил из-за: Shocker.Pro Пользователь может даже и не воспользоваться какой-то формой в текущем сеансе работы.Банальный Lazy<T> ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2015, 14:35 |
|
WPF: Псевдо-tabbed-MDI и Page
|
|||
---|---|---|---|
#18+
И как в Lazy<T> обернуть всю форму вместе с XAML-ом и codebehind-ом? Не стоит эту мою фразу выдергивать из контекста. Решать эту задачу отдельно от всего остального, изложенного в первом посте, бессмысленно ) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2015, 14:42 |
|
WPF: Псевдо-tabbed-MDI и Page
|
|||
---|---|---|---|
#18+
Shocker.ProИ как в Lazy<T> обернуть всю форму вместе с XAML-ом и codebehind-ом? Не стоит эту мою фразу выдергивать из контекста. Решать эту задачу отдельно от всего остального, изложенного в первом посте, бессмысленно )Lazy<MyUserControl> ? Ну это что касается ленивой инициализации. Просто я не понял, накой тут Призм. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2015, 17:16 |
|
WPF: Псевдо-tabbed-MDI и Page
|
|||
---|---|---|---|
#18+
А зачем делать её Lazy? они будут загружаться только тогда, когда будут запрошены. например пока Popup окно еще не открыто, её содержимое не загружено. просто интересно, зачем оборачивать в Lazy и что ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2015, 18:25 |
|
WPF: Псевдо-tabbed-MDI и Page
|
|||
---|---|---|---|
#18+
Roman MejtesА зачем делать её Lazy? они будут загружаться только тогда, когда будут запрошены. например пока Popup окно еще не открыто, её содержимое не загружено. просто интересно, зачем оборачивать в Lazy и что Тут коллега предложил использовать Призм для ленивой инициализации контролов. Я просто предложил Lazy<T> в качестве банальной альтернативы. Я в курсе, что и без Lazy<T> способов ленивой инициализации не мало. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2015, 04:24 |
|
|
start [/forum/topic.php?fid=21&fpage=16&tid=1440834]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 171ms |
0 / 0 |