powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита
10 сообщений из 10, страница 1 из 1
Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита
    #38067721
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго дня!
Если взять и добавить в код гуру 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
Непонятное поведение View в каноническом примере реализации MVVM Джоша Смита
    #38067745
Nicky_N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как-то так:

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

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

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

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

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

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

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


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