|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
user7320Алексей Кпропущено... У Джоша Смита подход так себе. Для загрузки детей дерева нужен аналог Lazy<T> с реализацией INotifyPropertyChanged. Вот моя асинхронная реализация. У Джоша ленивая загрузка.Тут тоже. Только у него загрузка по изменению свойства IsExpanded, а у меня при первом обращении к свойству Value. Так гибче, можно применять не только для дерева. user7320Я только с твоим async не понял, как она реализуется. Через другой поток?Какой Task создашь - через такой поток и будет. См "Асинхронные ленивые свойства" . user7320А если асинк не нужен, то всё нормально?Тут асинк не имеет значения. Можно сделать без него. Но с ним лучше. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 10:27 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Алексей КЕсть универсальный родной TreeViewItem, как часть родной content model WPF. Накой лепить ещё одну универсальную абстракцию? Бинди его на конкретную ViewModel и радуйся жизни. А я и так байню свои модели представления на TreeViewItem: Код: xml 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 10:27 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
user7320А я и так байню свои модели представления на TreeViewItemДа. Но вопрос, накой тут ещё одна универсальная прослойка, когда есть TreeViewItem. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 10:30 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Алексей, а так не комильфо? http://codearticles.ru/articles/2087 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 10:33 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Алексей КТут тоже. Только у него загрузка по изменению свойства IsExpanded, а у меня при первом обращении к свойству Value. Так гибче, можно применять не только для дерева. Даже если твой подход крут, это для меня почти ничего не значит. Проблема в том, что я ещё не настолько это всё понимаю, чтобы решать, что там круче, а что нет, и что мне и зачем надо. Я должен сам до этого дойти. Иначе будет тупое копирование чужих наработок без понимаю, как они работают и зачем они нужны. Вот у Джоша даже если и простой пример, но я понимания, как там работает каждая строчка и зачем она нужна. А у тебя я почитал - куча бесполезных для меня букв. Вот, например: авторСуществует два основных способа создания пар ViewModel-View, на основе которых строятся фрагменты пользовательского интерфейса: и дальше описание этих способов. Ты это сам писал? Ты до этого из своего опыта дошёл и все классы, типа UiResource и т. п., сам написал, или всё передрал у кого-то? Если сам, то это, по-видимому, только тебе и поможет. Другой человек, даже если и применяет что-то подобное, наверняка в твоей писанине разбираться не будет - он по-своему это всё понимает и вникать в чужую точку зрения, особенно, если она представляет из себя тонны кода и страниц с описаниями, ему просто неохота. А уж тем более, если этот человек как я, который и не понимает, зачем всё это нужно. Поэтому лучше отвечать на конкретную проблему новичка, чем сразу вываливать на него какой-нибудь монструозный "энтерпрайз-подход", который чтобы понять, надо ещё кучу тем поднять и изучить. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 10:37 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
мсущкоАлексей, а так не комильфо? http://codearticles.ru/articles/2087 Почему без async? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 10:42 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Алексей КПочему без async? Асинкодрочеры, блин :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 10:44 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Алексей Кuser7320А я и так байню свои модели представления на TreeViewItemДа. Но вопрос, накой тут ещё одна универсальная прослойка, когда есть TreeViewItem. Так Джош в своей же статье и написал, зачем прослойка нужна и почему - см. "What Exactly Makes the TreeView so Difficult?". мсущкоАлексей, а так не комильфо? http://codearticles.ru/articles/2087 автор Код: c# 1.
А где экшон? Где логика разворота потомков и заполнения их? И в чём принципиалная разница? По экшону разворачивать их или по IsExpanded/IsSelected? Тут же главное - это код заполнения потомков. ЗЫ. Children пишется без s на конце. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 10:49 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
мсущкоАлексей КПочему без async? Асинкодрочеры, блин :) Перфекционисты, тудыть их сюдыть... Зачем асинки для жалких пары сотен айтимов максимум в дереве? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 10:51 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
user7320А где экшон? Где логика разворота потомков и заполнения их? И в чём принципиалная разница? По экшону разворачивать их или по IsExpanded/IsSelected? Тут же главное - это код заполнения потомков. ЗЫ. Children пишется без s на конце. Для лейзи юзай команду в OnExpanded. У меня не лейзи. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 10:55 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
user7320А у тебя я почитал - куча бесполезных для меня букв.Я предлагал прочитать пару абзацев про UiAsyncLazyProperty<T> и сравнить его с родным Lazy<T>. user7320Вот, например: авторСуществует два основных способа создания пар ViewModel-View, на основе которых строятся фрагменты пользовательского интерфейса: и дальше описание этих способов. Ты это сам писал? Ты до этого из своего опыта дошёл и все классы, типа UiResource и т. п., сам написал, или всё передрал у кого-то?К сожалению, сам. Набив при этом не мало шишек и выбросив кучу кода в золотую корзину. user7320Если сам, то это, по-видимому, только тебе и поможет. Другой человек, даже если и применяет что-то подобное, наверняка в твоей писанине разбираться не будет - он по-своему это всё понимает и вникать в чужую точку зрения, особенно, если она представляет из себя тонны кода и страниц с описаниями, ему просто неохота.Мне в своё время не хватало подобного примера. Весь инет завален хэлоувордами, на первый взгляд красивыми, но неприменимыми в серьёзном проекте. Мой же пример реализации показывает как это выглядит во вполне реальном проекте, не слишком большом и не слишком маленьком. А этот мануал используется в первую очередь для обучения наших программистов. А раз уж он есть, я его решил опубликовать. С одной стороны мне могут указать на ошибки, с другой - это, как я думаю, действительно может оказаться кому-то полезным. user7320А уж тем более, если этот человек как я, который и не понимает, зачем всё это нужно. Поэтому лучше отвечать на конкретную проблему новичка, чем сразу вываливать на него какой-нибудь монструозный "энтерпрайз-подход", который чтобы понять, надо ещё кучу тем поднять и изучить.С этим не спорю, материал рассчитан на подготовленного читателя. Я специально не стал писать на общеизвестные темы, этой информации и без меня хватает. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 11:04 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
user7320мсущкопропущено... Асинкодрочеры, блин :) Перфекционисты, тудыть их сюдыть... Зачем асинки для жалких пары сотен айтимов максимум в дереве?Когда при открытии формы у тебя из UI-потока будут последовательно синхронно запускаться с десяток мелких запросов к вебсервису, поверь, это более чем заметно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 11:07 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
мсущкоАлексей КПочему без async? Асинкодрочеры, блин :)В убогом JS всё асинхронно. А мы чем хуже? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 11:15 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
мсущкоuser7320А где экшон? Где логика разворота потомков и заполнения их? И в чём принципиалная разница? По экшону разворачивать их или по IsExpanded/IsSelected? Тут же главное - это код заполнения потомков. ЗЫ. Children пишется без s на конце. Для лейзи юзай команду в OnExpanded. У меня не лейзи. У тебя сразу всё грузится, как я понял. Но у тебя все модельки одного типа. А в джошевском примере есть вариант, где на каждом уровне дерева своя моделька. Соответственно, и своя моделька представления (тут-то наследование моделей представления для узлов дерева и вступает в игру), которая отличается в основном, полем для хранения соответствующей модельки и переопределением метода загрузки потомков. Лэйзи тут всего лишь как опция. авторМне в своё время не хватало подобного примера. Весь инет завален хэлоувордами, на первый взгляд красивыми, но неприменимыми в серьёзном проекте. Мой же пример реализации показывает как это выглядит во вполне реальном проекте, не слишком большом и не слишком маленьком. А этот мануал используется в первую очередь для обучения наших программистов. А раз уж он есть, я его решил опубликовать. С одной стороны мне могут указать на ошибки, с другой - это, как я думаю, действительно может оказаться кому-то полезным. Тогда согласен. Алексей Кuser7320пропущено... Перфекционисты, тудыть их сюдыть... Зачем асинки для жалких пары сотен айтимов максимум в дереве?Когда при открытии формы у тебя из UI-потока будут последовательно синхронно запускаться с десяток мелких запросов к вебсервису, поверь, это более чем заметно. Ну, если это запросы к потенциально тормозящим репозиториям, то да. Но ты, как я понял, используешь эти асинки и лейзи везде, даже если надо из ОЗУ достать и показать десяток айтимов? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 11:19 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
user7320Ну, если это запросы к потенциально тормозящим репозиториям, то да. Но ты, как я понял, используешь эти асинки и лейзи вездеЛюбое обращение к серверу потенциально тормозящее. user7320даже если надо из ОЗУ достать и показать десяток айтимов?Ну и что? Там применяется Task. Его можно запустить четырьмя способами: 1. Thread Pool. 2. New Thread. 3. UI Thread. 4. I/O Completion port. Так же можно произвести расчёт синхронно и вернуть завершённый Task с помощью метода Task.FromResult. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 11:33 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Алексей КВ убогом JS всё асинхронно. А мы чем хуже? Ну если ты о аяксе, то да. Просто там всё сложнее, есть песочница в виде браузера, браузер - это не только твоё приложение, но и 100500 остальных. А когда в руках целая песочница, то надобность асинка в разы ниже. Просто нынче асинк "моден", вот ты его куда надо и не надо мастыришь. Ну ведь признайся, эффект обезьянок на лицо. user7320Но у тебя все модельки одного типа. А в джошевском примере есть вариант, где на каждом уровне дерева своя моделька. Соответственно, и своя моделька представления (тут-то наследование моделей представления для узлов дерева и вступает в игру), которая отличается в основном, полем для хранения соответствующей модельки и переопределением метода загрузки потомков. Лэйзи тут всего лишь как опция. Правильно, каждому дереву своя модель представления. Не вижу ничего ужасного. Обобщение - это болезнь. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 12:00 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
мсущкоАлексей КВ убогом JS всё асинхронно. А мы чем хуже? Ну если ты о аяксе, то да.Да, о Аяксе. мсущкоПросто там всё сложнее, есть песочница в виде браузера, браузер - это не только твоё приложение, но и 100500 остальных. А когда в руках целая песочница, то надобность асинка в разы ниже.И там и тут надобность одинаковая. И там и тут есть UI-поток, который нельзя блокировать длительными обработчиками. Повторюсь, любое обращение к серверу - это (потенциально?) длительная операция. мсущкоПросто нынче асинк "моден", вот ты его куда надо и не надо мастыришь. Ну ведь признайся, эффект обезьянок на лицо.Кто бы говорил, любитель вьюмоделей. :-) мсущко Чрезмерное обобщение - это болезнь.Добавил... Во всём надо знать меру. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 12:19 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Алексей КИ там и тут надобность одинаковая. И там и тут есть UI-поток, который нельзя блокировать длительными обработчиками. Повторюсь, любое обращение к серверу - это (потенциально?) длительная операция. Согласен. Но длительное ожидание - это нештатная ситуация, то есть проблема. А проблемы нужно решать другими способами. Ну ты понимаешь, о чём я. Так вот зачем мне городить петрушку асинков, если проблема кроется в том, что в табличке БД отвалился индекс и всё стало раком. Ведь даже в твоём случае UI не заблокируется - это да, но юзер не получит данные (или получит через 100500 лет). В обоих случаях работа юзера останавливается. Просто в случае с браузером нужно понимать, у нас есть и другие вкладки. А в случае личной песочницы вообще пох. Алексей Кмсущко Чрезмерное обобщение - это болезнь.Добавил... Во всём надо знать меру. 100%, но в данной задаче имхо нечего обобщать, в дерево может хоть кто угодно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 12:39 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
мсущкоТак вот зачем мне городить петрушку асинковДа какая там петрушка, там работы на 5 минут. мсущкоесли проблема кроется в том, что в табличке БД отвалился индекс и всё стало раком.Одно другому не мешает. Но повторюсь, с десяток синхронных мелких запросов к вебсервису при открытии формы очень даже заметны. Их параллельный асинхронный запуск решает проблему. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 12:53 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
мсущкоАлексей Кпропущено... Добавил... Во всём надо знать меру. 100%, но в данной задаче имхо нечего обобщать, в дерево может хоть кто угодно.Да ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 12:55 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Алексей К Но повторюсь, с десяток синхронных мелких запросов к вебсервису при открытии формы очень даже заметны. Их параллельный асинхронный запуск решает проблему. А зачем столько много обращений? Многовато... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 13:04 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
мсущкоАлексей К Но повторюсь, с десяток синхронных мелких запросов к вебсервису при открытии формы очень даже заметны. Их параллельный асинхронный запуск решает проблему. А зачем столько много обращений? Многовато...Можно по одному на комбобокс. Можно подтянуть список а потом лениво подтягивать детализацию по каждой записи. Всякое бывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 13:08 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Алексей КМожно по одному на комбобокс. Можно подтянуть список а потом лениво подтягивать детализацию по каждой записи. Всякое бывает. А почему не хочешь одну большую модель выплёвывать из сервиса для каждой формы? Ну а дальше уже на клиенте - через вью модель и в mvvm. Производительность вырастет в разы. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 13:16 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
мсущкоАлексей КМожно по одному на комбобокс. Можно подтянуть список а потом лениво подтягивать детализацию по каждой записи. Всякое бывает. А почему не хочешь одну большую модель выплёвывать из сервиса для каждой формы? Ну а дальше уже на клиенте - через вью модель и в mvvm. Производительность вырастет в разы.Пробовали так. Не понравилось. Приходится писать много букв. Да и не все задачи можно решить таким образом. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 13:36 |
|
Универсальная модель представления для узла TreeView
|
|||
---|---|---|---|
#18+
Алексей КПробовали так. Не понравилось. Приходится писать много букв. Да и не все задачи можно решить таким образом. А на мой взгляд вполне удобно. Особенно для пухлых форм. Кстати, посмотри на odata , трачить контекст можно прям с клиента. Пока не так гибко, как EF, но уже съедобно. Ну и REST в одном флаконе. P.S. Вот за что я люблю веб - на сервере приложений не нужны никакие прокладки, напрямую заходим сразу в базу и собираем модель. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2014, 14:32 |
|
|
start [/forum/topic.php?fid=21&msg=38632237&tid=1441130]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
144ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 246ms |
0 / 0 |