Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита / 10 сообщений из 10, страница 1 из 1
06.12.2012, 12:34
    #38067721
Nicky_N
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита
Всем доброго дня!
Если взять и добавить в код гуру 2 строчки:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
        public CustomerView()
        {
            InitializeComponent();
            System.Diagnostics.Debug.WriteLine("InitializeCustomerView");
        }

        public AllCustomersView()
        {
            InitializeComponent();
            System.Diagnostics.Debug.WriteLine("InitializeAllCustomerView");
        }


тут начинаются непонятки.
Если открыть кучу вкладок CustomerView (БЕЗ AllCustomersView) и просто ходить по ним, не закрывая, то Output нам выведет InitializeCustomerView один раз, все нормально. НО, если вдруг среди этой кучи вкладок на первом месте окажется AllCustomersView, а при хождении по вкладкам вы случайно будете заходить и на первую, то тут окно Output выдаст нам целую кучу событий InitializeCustomerView и InitializeAllCustomerView. Получается, что при каждом заходе на вкладку создается соответств. View?
...
Рейтинг: 0 / 0
06.12.2012, 12:40
    #38067745
Nicky_N
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита
как-то так:

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).
...
Рейтинг: 0 / 0
06.12.2012, 15:34
    #38068139
Nicky_N
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита
1. В рабочем проекте (TabControl привязан к коллекции ViewModels, для каждой определен свой DataTemplate) - схожая ситуация, если одна ViewModel - все ок, если 2 - уже чехарда с инициализацией. Дело, как мне кажется, в инициализации ViewModels: если больше одной - проблемы.
2. При определении TabControl.ContentTemplateSelector ситуация не меняется.
...
Рейтинг: 0 / 0
06.12.2012, 16:03
    #38068199
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита
Nicky_N,
вероятно, в каких-то случаях объект View "ничего не держит", вот мусорщик и подгребает, добавьте еще деструктор, мож что-то и прояснится
Код: c#
1.
2.
3.
4.
        ~CustomerView()
        {
            System.Diagnostics.Debug.WriteLine("CustomerView gced");
        }
...
Рейтинг: 0 / 0
06.12.2012, 16:32
    #38068263
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита
LR,

хотя "мусорщик" это уже следствие, а причина наверное в том, что при изменении текущей ViewModel создается (а не используется ранее созданный) новый соответствующий View, т.е., возможно, так и должно быть (пример я не видел)
...
Рейтинг: 0 / 0
06.12.2012, 16:42
    #38068288
Nicky_N
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита
LR,

Добавил, не прояснилось (View финализируются перед финализацией ViewModel).
...
Рейтинг: 0 / 0
06.12.2012, 16:54
    #38068318
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита
Nicky_N,

ну может так и должно быть, при каждом изменении ViewModel создается новый соотв. View? а можете сюда выложить проект примера?
...
Рейтинг: 0 / 0
06.12.2012, 17:02
    #38068343
Nicky_N
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита
LR,

тут
только внесите изменения (см. сабж)
...
Рейтинг: 0 / 0
06.12.2012, 19:48
    #38068640
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита
Nicky_N,

похоже так и должно быть, by design, в разделе "Applying a View to a ViewModel" статьи описано в общих чертах что происходит... тут возникает вопрос - умеет ли WPF-рендеринг кешировать однажды использованные DataTemplates - этого я не знаю, но сомневаюсь (((
...
Рейтинг: 0 / 0
07.12.2012, 13:33
    #38069632
Nicky_N
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита
Почитав нерусских форумов, резюмирую:
да, ожидаемое поведение, если использовать DataTemplate для TabItem, при чем количество DataTemplate должно быть больше 1. При каждом заходе на вкладку соответствующий UserControl проходит полный путь: Initialize(), Load(), Unload().

Если в TabItem.Content прописать конкретный UserControl, то указанного поведения не наблюдается.
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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