powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Универсальная модель представления для узла TreeView
25 сообщений из 54, страница 2 из 3
Универсальная модель представления для узла TreeView
    #38632237
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Алексей Кпропущено...
У Джоша Смита подход так себе. Для загрузки детей дерева нужен аналог Lazy<T> с реализацией INotifyPropertyChanged. Вот моя асинхронная реализация.
У Джоша ленивая загрузка.Тут тоже. Только у него загрузка по изменению свойства IsExpanded, а у меня при первом обращении к свойству Value. Так гибче, можно применять не только для дерева.

user7320Я только с твоим async не понял, как она реализуется. Через другой поток?Какой Task создашь - через такой поток и будет. См "Асинхронные ленивые свойства" .

user7320А если асинк не нужен, то всё нормально?Тут асинк не имеет значения. Можно сделать без него. Но с ним лучше.
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632238
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЕсть универсальный родной TreeViewItem, как часть родной content model WPF. Накой лепить ещё одну универсальную абстракцию? Бинди его на конкретную ViewModel и радуйся жизни.
А я и так байню свои модели представления на TreeViewItem:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
  <TreeView.ItemTemplate>
	<HierarchicalDataTemplate 
		ItemsSource="{Binding Children}" 
		DataType="qvms:NodedQuest_VM"
		>
		<TextBlock Text="{Binding Path=Name}" />
	</HierarchicalDataTemplate>
  </TreeView.ItemTemplate>
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632239
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320А я и так байню свои модели представления на TreeViewItemДа. Но вопрос, накой тут ещё одна универсальная прослойка, когда есть TreeViewItem.
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632241
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей, а так не комильфо? http://codearticles.ru/articles/2087
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632244
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КТут тоже. Только у него загрузка по изменению свойства IsExpanded, а у меня при первом обращении к свойству Value. Так гибче, можно применять не только для дерева.
Даже если твой подход крут, это для меня почти ничего не значит. Проблема в том, что я ещё не настолько это всё понимаю, чтобы решать, что там круче, а что нет, и что мне и зачем надо. Я должен сам до этого дойти. Иначе будет тупое копирование чужих наработок без понимаю, как они работают и зачем они нужны. Вот у Джоша даже если и простой пример, но я понимания, как там работает каждая строчка и зачем она нужна. А у тебя я почитал - куча бесполезных для меня букв.

Вот, например:

авторСуществует два основных способа создания пар ViewModel-View, на основе которых строятся фрагменты пользовательского интерфейса:


и дальше описание этих способов.

Ты это сам писал? Ты до этого из своего опыта дошёл и все классы, типа UiResource и т. п., сам написал, или всё передрал у кого-то? Если сам, то это, по-видимому, только тебе и поможет. Другой человек, даже если и применяет что-то подобное, наверняка в твоей писанине разбираться не будет - он по-своему это всё понимает и вникать в чужую точку зрения, особенно, если она представляет из себя тонны кода и страниц с описаниями, ему просто неохота. А уж тем более, если этот человек как я, который и не понимает, зачем всё это нужно.


Поэтому лучше отвечать на конкретную проблему новичка, чем сразу вываливать на него какой-нибудь монструозный "энтерпрайз-подход", который чтобы понять, надо ещё кучу тем поднять и изучить.
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632245
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоАлексей, а так не комильфо? http://codearticles.ru/articles/2087 Почему без async?
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632246
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей КПочему без async?
Асинкодрочеры, блин :)
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632248
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кuser7320А я и так байню свои модели представления на TreeViewItemДа. Но вопрос, накой тут ещё одна универсальная прослойка, когда есть TreeViewItem.
Так Джош в своей же статье и написал, зачем прослойка нужна и почему - см. "What Exactly Makes the TreeView so Difficult?".


мсущкоАлексей, а так не комильфо? http://codearticles.ru/articles/2087
автор
Код: c#
1.
_selectedItemChangedCommand = new RelayCommand(action => { });


А где экшон? Где логика разворота потомков и заполнения их?

И в чём принципиалная разница? По экшону разворачивать их или по IsExpanded/IsSelected?

Тут же главное - это код заполнения потомков.


ЗЫ. Children пишется без s на конце.
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632251
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоАлексей КПочему без async?
Асинкодрочеры, блин :)
Перфекционисты, тудыть их сюдыть...

Зачем асинки для жалких пары сотен айтимов максимум в дереве?
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632254
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
user7320А где экшон? Где логика разворота потомков и заполнения их?

И в чём принципиалная разница? По экшону разворачивать их или по IsExpanded/IsSelected?

Тут же главное - это код заполнения потомков.


ЗЫ. Children пишется без s на конце.
Для лейзи юзай команду в OnExpanded. У меня не лейзи.
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632256
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320А у тебя я почитал - куча бесполезных для меня букв.Я предлагал прочитать пару абзацев про UiAsyncLazyProperty<T> и сравнить его с родным Lazy<T>.

user7320Вот, например:

авторСуществует два основных способа создания пар ViewModel-View, на основе которых строятся фрагменты пользовательского интерфейса:

и дальше описание этих способов.

Ты это сам писал? Ты до этого из своего опыта дошёл и все классы, типа UiResource и т. п., сам написал, или всё передрал у кого-то?К сожалению, сам. Набив при этом не мало шишек и выбросив кучу кода в золотую корзину.

user7320Если сам, то это, по-видимому, только тебе и поможет. Другой человек, даже если и применяет что-то подобное, наверняка в твоей писанине разбираться не будет - он по-своему это всё понимает и вникать в чужую точку зрения, особенно, если она представляет из себя тонны кода и страниц с описаниями, ему просто неохота.Мне в своё время не хватало подобного примера. Весь инет завален хэлоувордами, на первый взгляд красивыми, но неприменимыми в серьёзном проекте. Мой же пример реализации показывает как это выглядит во вполне реальном проекте, не слишком большом и не слишком маленьком. А этот мануал используется в первую очередь для обучения наших программистов. А раз уж он есть, я его решил опубликовать. С одной стороны мне могут указать на ошибки, с другой - это, как я думаю, действительно может оказаться кому-то полезным.

user7320А уж тем более, если этот человек как я, который и не понимает, зачем всё это нужно.

Поэтому лучше отвечать на конкретную проблему новичка, чем сразу вываливать на него какой-нибудь монструозный "энтерпрайз-подход", который чтобы понять, надо ещё кучу тем поднять и изучить.С этим не спорю, материал рассчитан на подготовленного читателя. Я специально не стал писать на общеизвестные темы, этой информации и без меня хватает.
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632257
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320мсущкопропущено...

Асинкодрочеры, блин :)
Перфекционисты, тудыть их сюдыть...

Зачем асинки для жалких пары сотен айтимов максимум в дереве?Когда при открытии формы у тебя из UI-потока будут последовательно синхронно запускаться с десяток мелких запросов к вебсервису, поверь, это более чем заметно.
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632259
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоАлексей КПочему без async?
Асинкодрочеры, блин :)В убогом JS всё асинхронно. А мы чем хуже?
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632261
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоuser7320А где экшон? Где логика разворота потомков и заполнения их?

И в чём принципиалная разница? По экшону разворачивать их или по IsExpanded/IsSelected?

Тут же главное - это код заполнения потомков.


ЗЫ. Children пишется без s на конце.
Для лейзи юзай команду в OnExpanded. У меня не лейзи.
У тебя сразу всё грузится, как я понял. Но у тебя все модельки одного типа. А в джошевском примере есть вариант, где на каждом уровне дерева своя моделька. Соответственно, и своя моделька представления (тут-то наследование моделей представления для узлов дерева и вступает в игру), которая отличается в основном, полем для хранения соответствующей модельки и переопределением метода загрузки потомков. Лэйзи тут всего лишь как опция.

авторМне в своё время не хватало подобного примера. Весь инет завален хэлоувордами, на первый взгляд красивыми, но неприменимыми в серьёзном проекте. Мой же пример реализации показывает как это выглядит во вполне реальном проекте, не слишком большом и не слишком маленьком. А этот мануал используется в первую очередь для обучения наших программистов. А раз уж он есть, я его решил опубликовать. С одной стороны мне могут указать на ошибки, с другой - это, как я думаю, действительно может оказаться кому-то полезным.
Тогда согласен.

Алексей Кuser7320пропущено...

Перфекционисты, тудыть их сюдыть...

Зачем асинки для жалких пары сотен айтимов максимум в дереве?Когда при открытии формы у тебя из UI-потока будут последовательно синхронно запускаться с десяток мелких запросов к вебсервису, поверь, это более чем заметно.
Ну, если это запросы к потенциально тормозящим репозиториям, то да. Но ты, как я понял, используешь эти асинки и лейзи везде, даже если надо из ОЗУ достать и показать десяток айтимов?
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632266
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Ну, если это запросы к потенциально тормозящим репозиториям, то да. Но ты, как я понял, используешь эти асинки и лейзи вездеЛюбое обращение к серверу потенциально тормозящее.
user7320даже если надо из ОЗУ достать и показать десяток айтимов?Ну и что? Там применяется Task. Его можно запустить четырьмя способами:

1. Thread Pool.
2. New Thread.
3. UI Thread.
4. I/O Completion port.

Так же можно произвести расчёт синхронно и вернуть завершённый Task с помощью метода Task.FromResult.
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632273
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей КВ убогом JS всё асинхронно. А мы чем хуже?
Ну если ты о аяксе, то да. Просто там всё сложнее, есть песочница в виде браузера, браузер - это не только твоё приложение, но и 100500 остальных. А когда в руках целая песочница, то надобность асинка в разы ниже. Просто нынче асинк "моден", вот ты его куда надо и не надо мастыришь. Ну ведь признайся, эффект обезьянок на лицо.

user7320Но у тебя все модельки одного типа. А в джошевском примере есть вариант, где на каждом уровне дерева своя моделька. Соответственно, и своя моделька представления (тут-то наследование моделей представления для узлов дерева и вступает в игру), которая отличается в основном, полем для хранения соответствующей модельки и переопределением метода загрузки потомков. Лэйзи тут всего лишь как опция.
Правильно, каждому дереву своя модель представления. Не вижу ничего ужасного. Обобщение - это болезнь.
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632283
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоАлексей КВ убогом JS всё асинхронно. А мы чем хуже?
Ну если ты о аяксе, то да.Да, о Аяксе.

мсущкоПросто там всё сложнее, есть песочница в виде браузера, браузер - это не только твоё приложение, но и 100500 остальных. А когда в руках целая песочница, то надобность асинка в разы ниже.И там и тут надобность одинаковая. И там и тут есть UI-поток, который нельзя блокировать длительными обработчиками. Повторюсь, любое обращение к серверу - это (потенциально?) длительная операция.

мсущкоПросто нынче асинк "моден", вот ты его куда надо и не надо мастыришь. Ну ведь признайся, эффект обезьянок на лицо.Кто бы говорил, любитель вьюмоделей. :-)

мсущко Чрезмерное обобщение - это болезнь.Добавил... Во всём надо знать меру.
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632297
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей КИ там и тут надобность одинаковая. И там и тут есть UI-поток, который нельзя блокировать длительными обработчиками. Повторюсь, любое обращение к серверу - это (потенциально?) длительная операция.
Согласен. Но длительное ожидание - это нештатная ситуация, то есть проблема. А проблемы нужно решать другими способами. Ну ты понимаешь, о чём я. Так вот зачем мне городить петрушку асинков, если проблема кроется в том, что в табличке БД отвалился индекс и всё стало раком. Ведь даже в твоём случае UI не заблокируется - это да, но юзер не получит данные (или получит через 100500 лет). В обоих случаях работа юзера останавливается. Просто в случае с браузером нужно понимать, у нас есть и другие вкладки. А в случае личной песочницы вообще пох.

Алексей Кмсущко Чрезмерное обобщение - это болезнь.Добавил... Во всём надо знать меру.
100%, но в данной задаче имхо нечего обобщать, в дерево может хоть кто угодно.
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632313
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоТак вот зачем мне городить петрушку асинковДа какая там петрушка, там работы на 5 минут.

мсущкоесли проблема кроется в том, что в табличке БД отвалился индекс и всё стало раком.Одно другому не мешает. Но повторюсь, с десяток синхронных мелких запросов к вебсервису при открытии формы очень даже заметны. Их параллельный асинхронный запуск решает проблему.
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632314
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоАлексей Кпропущено...
Добавил... Во всём надо знать меру.
100%, но в данной задаче имхо нечего обобщать, в дерево может хоть кто угодно.Да
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632318
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К Но повторюсь, с десяток синхронных мелких запросов к вебсервису при открытии формы очень даже заметны. Их параллельный асинхронный запуск решает проблему.
А зачем столько много обращений? Многовато...
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632319
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоАлексей К Но повторюсь, с десяток синхронных мелких запросов к вебсервису при открытии формы очень даже заметны. Их параллельный асинхронный запуск решает проблему.
А зачем столько много обращений? Многовато...Можно по одному на комбобокс. Можно подтянуть список а потом лениво подтягивать детализацию по каждой записи. Всякое бывает.
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632322
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей КМожно по одному на комбобокс. Можно подтянуть список а потом лениво подтягивать детализацию по каждой записи. Всякое бывает.
А почему не хочешь одну большую модель выплёвывать из сервиса для каждой формы? Ну а дальше уже на клиенте - через вью модель и в mvvm. Производительность вырастет в разы.
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632331
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоАлексей КМожно по одному на комбобокс. Можно подтянуть список а потом лениво подтягивать детализацию по каждой записи. Всякое бывает.
А почему не хочешь одну большую модель выплёвывать из сервиса для каждой формы? Ну а дальше уже на клиенте - через вью модель и в mvvm. Производительность вырастет в разы.Пробовали так. Не понравилось. Приходится писать много букв. Да и не все задачи можно решить таким образом.
...
Рейтинг: 0 / 0
Универсальная модель представления для узла TreeView
    #38632362
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей КПробовали так. Не понравилось. Приходится писать много букв. Да и не все задачи можно решить таким образом.
А на мой взгляд вполне удобно. Особенно для пухлых форм. Кстати, посмотри на odata , трачить контекст можно прям с клиента. Пока не так гибко, как EF, но уже съедобно. Ну и REST в одном флаконе.

P.S. Вот за что я люблю веб - на сервере приложений не нужны никакие прокладки, напрямую заходим сразу в базу и собираем модель.
...
Рейтинг: 0 / 0
25 сообщений из 54, страница 2 из 3
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Универсальная модель представления для узла TreeView
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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