|
Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита
|
|||
---|---|---|---|
#18+
Всем доброго дня! Если взять и добавить в код гуру 2 строчки: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
тут начинаются непонятки. Если открыть кучу вкладок CustomerView (БЕЗ AllCustomersView) и просто ходить по ним, не закрывая, то Output нам выведет InitializeCustomerView один раз, все нормально. НО, если вдруг среди этой кучи вкладок на первом месте окажется AllCustomersView, а при хождении по вкладкам вы случайно будете заходить и на первую, то тут окно Output выдаст нам целую кучу событий InitializeCustomerView и InitializeAllCustomerView. Получается, что при каждом заходе на вкладку создается соответств. View? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2012, 12:34 |
|
Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита
|
|||
---|---|---|---|
#18+
как-то так: InitializeAllCustomerView InitializeCustomerView 'MvvmDemo.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Numerics\v4.0_4.0.0.0__b77a5c561934e089\System.Numerics.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. InitializeAllCustomerView InitializeCustomerView InitializeAllCustomerView InitializeCustomerView The thread 'vshost.RunParkingWindow' (0x78c) has exited with code 0 (0x0). The thread '<No Name>' (0x6c4) has exited with code 0 (0x0). CustomerViewModel (New Customer) (16930235) Finalized CustomerViewModel (New Customer) (33921363) Finalized CustomerViewModel (New Customer) (12866878) Finalized CustomerViewModel (Königlich Essen) (18512584) Finalized CustomerViewModel (Hanari Carnes) (38589154) Finalized CustomerViewModel (Eastern Connection) (55455542) Finalized CustomerViewModel (Alfreds Futterkiste) (43668622) Finalized CustomerViewModel (McCort, Denise) (13062036) Finalized CustomerViewModel (Walker, Wilfred) (53343246) Finalized CustomerViewModel (Shifflett, Karl) (30970808) Finalized CustomerViewModel (Hinkson, Grant) (13049299) Finalized CustomerViewModel (Nolan, Jordan) (13533320) Finalized CustomerViewModel (Crafton, Jim) (5793943) Finalized CustomerViewModel (Bujak, Greg) (43686667) Finalized CustomerViewModel (Smith, Josh) (5069215) Finalized AllCustomersViewModel (All Customers) (65818926) Finalized CommandViewModel (CreateNewCustomer) (29034842) Finalized CommandViewModel (ViewAllCustomers) (4278680) Finalized MainWindowViewModel (MVVM Demo) (14306053) Finalized The program '[2076] MvvmDemo.vshost.exe: Program Trace' has exited with code 0 (0x0). The program '[2076] MvvmDemo.vshost.exe: Managed (v4.0.30319)' has exited with code 0 (0x0). ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2012, 12:40 |
|
Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита
|
|||
---|---|---|---|
#18+
1. В рабочем проекте (TabControl привязан к коллекции ViewModels, для каждой определен свой DataTemplate) - схожая ситуация, если одна ViewModel - все ок, если 2 - уже чехарда с инициализацией. Дело, как мне кажется, в инициализации ViewModels: если больше одной - проблемы. 2. При определении TabControl.ContentTemplateSelector ситуация не меняется. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2012, 15:34 |
|
Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита
|
|||
---|---|---|---|
#18+
Nicky_N, вероятно, в каких-то случаях объект View "ничего не держит", вот мусорщик и подгребает, добавьте еще деструктор, мож что-то и прояснится Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2012, 16:03 |
|
Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита
|
|||
---|---|---|---|
#18+
LR, хотя "мусорщик" это уже следствие, а причина наверное в том, что при изменении текущей ViewModel создается (а не используется ранее созданный) новый соответствующий View, т.е., возможно, так и должно быть (пример я не видел) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2012, 16:32 |
|
Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита
|
|||
---|---|---|---|
#18+
LR, Добавил, не прояснилось (View финализируются перед финализацией ViewModel). ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2012, 16:42 |
|
Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита
|
|||
---|---|---|---|
#18+
Nicky_N, ну может так и должно быть, при каждом изменении ViewModel создается новый соотв. View? а можете сюда выложить проект примера? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2012, 16:54 |
|
Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2012, 17:02 |
|
Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита
|
|||
---|---|---|---|
#18+
Nicky_N, похоже так и должно быть, by design, в разделе "Applying a View to a ViewModel" статьи описано в общих чертах что происходит... тут возникает вопрос - умеет ли WPF-рендеринг кешировать однажды использованные DataTemplates - этого я не знаю, но сомневаюсь ((( ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2012, 19:48 |
|
Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита
|
|||
---|---|---|---|
#18+
Почитав нерусских форумов, резюмирую: да, ожидаемое поведение, если использовать DataTemplate для TabItem, при чем количество DataTemplate должно быть больше 1. При каждом заходе на вкладку соответствующий UserControl проходит полный путь: Initialize(), Load(), Unload(). Если в TabItem.Content прописать конкретный UserControl, то указанного поведения не наблюдается. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2012, 13:33 |
|
|
start [/forum/topic.php?fid=21&fpage=34&tid=1441573]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 298ms |
total: | 419ms |
0 / 0 |