Pull to refresh
64
0
Алексей Акимов @AlexAkimov

Пользователь

Send message
Вот именно! А тут цитата Йоды, подписано Даблдором, а справа Гэндальф. Не хватает только чуть-чуть несимметрично стоящих котлов в углу — и рабочий настрой точно будет нарушен :-)
Это же цитата Йоды, а не Дамблдора! :-)
Так вы взяли картинку для левой руки. Как раз для левой руки на этой картинке зона в левом нижнем углу помечена как wo
Прикольно.

Я таким способом пользуюсь уже лет 10 :-)
Помогает настроиться на нужный лад.
Вот так просто взять и перевести книгу любимого автора, а потом ещё и опубликовать её — это круто. Юля, аплодирую стоя! И побежал качать электронную версию :-)
Если у вас триальная версия наших компонентов, то, к сожалению, согласно нашей EULA, распространять их нельзя.

Но если хотите, Вы можете просто выложить свой пример и добавить в проект файл readme со ссылкой, по которой можно взять триальную версию наших компонентов.
У нас в DevExpress тоже есть разные графики для .NET (WinForms, ASP.NET, WPF и SL). Было бы очень интересно увидеть и их в этом сравнении.
Плюсую автора статьи, надесюь, не сольют за коммент :-)
В этом плане отличный интерфейс у Авоськи — мне вполне удобно пользоваться одной рукой.
Поставил бы плюс уже за один только заголовок статьи :-)
Максим, если не секрет, а вы делали дизайн каких-нибудь мобильных приложений? Интересно было бы посмотреть.
Иван и Елена, спасибо за отличную статью! Многие моменты знакомы до боли, ну и конечно же, всегда приятно узнать, как работается нашим коллегам по цеху в других отечественных компаниях :-)
Смысл названия Instant Feedback UI в том, что UI никогда не блокируется и пользователь сразу получается отклик на свои действия. А все действия выполняются асинхронно, в другом треде.

А ленивая догрузка — это лишь небольшая часть механизма. Instant Feedback подразумевает гораздо больше всего: и кеширование данных, и группировку на сервере, и вычисление функций и т.д.
Добрый день!

Да, работает. То есть для детальных гридов создаются только те строки, которые видны на экране.

Кроме того, при таком подходе как у нас, когда используется один скроллер для мастер и всех детальных гридов, строчки повторно используются даже между различными детальными гридами, что ускоряет раскрытие детальных гридов (если в кеше уже есть строки от предыдущих детальных гридов, которые в данный момент не видны на экране). А также это уменьшает использование памяти при большом количестве открытых детальных гридов благодаря тому, что в каждый момент времени в памяти находится строк не больше, чем помещается на экране.

В трилисте виртуализация, соответственно, тоже полностью поддерживается. То есть строки могут повторно использоваться при скроллинге, expand/collapse, в том числе между нодами, находящимися на разных уровнях.
Режим с построением иерархической структуры по плоскому списку (то, что Вы охарактеризовали как «следы реляционной базы данных») – это только один из нескольких доступных в трилисте. Поддерживаются также режимы биндинга через HierarchicalDataTemplate (как в стандартном TreeView) и через указание поля с дочерними записями.

Для указания поля со связанной коллекцией потомков необходимо задать ChildNodesPath и TreeDerivationMode, для Вашего примера это будет:

<dxg:TreeListView Name="treeListView1" ItemsSource="{Binding Children}" TreeDerivationMode="ChildNodesSelector" ChildNodesPath="Children"/>


> Я повторюсь что высказываю свое субъективное суждение и только относительно WPF грида.

По-моему, всё отлично :-) Хабр — место для дискуссий и для обмена мнениями. Нам тоже было очень ценно узнать взгляд на наш продукт со стороны потенциального пользователя, к тому же соотечественника.
Если будут вопросы — задавайте, всегда рады помочь! Писать можно или в нашу официальную службу поддержки www.devexpress.com/sc, или в ветку вопросов на Хабре habrahabr.ru/company/devexpress/questions/, или можете послать сообщение мне лично.

Удачи!
Что касается другой функциональности, которую Вы рассматривали в Вашей статье:

1. Ленивая догрузка записей и поддержка WCF DataServices.

Наш грид полностью поддерживает этот режим (у нас он называется Instant Feedback Mode) и полностью поддерживает загрузку записей по требованию, кеширование, оптимизацию объема загружаемых данных в зависимости от пропускной способности канала, сортировку, группировку, фильтрацию, вычисление Summaries полностью на стороне сервера и многое другое.

Пример можно посмотреть в GridDemo/Server-side Data Processing/WCF Data Services (OData), документация по этой ссылке: documentation.devexpress.com/#WPF/CustomDocument9565

2. Древовидный грид.
У нас есть TreeListControl, заточенный под различные режимы отображения древовидных данных. Подробнее можно почитать здесь: documentation.devexpress.com/#WPF/CustomDocument9933

3. Локализация.
Мы предоставляем полную русскую локализацию для всех наших компонентов. Подробнее можно посмотреть в документации: documentation.devexpress.com/#WPF/CustomDocument7544

4. Печать.
Мы полностью поддерживаем печать и экспорт в различные форматы — xls, xlsx, pdf и т.д.

Здесь есть вся информация: documentation.devexpress.com/#WPF/CustomDocument6160
Здравствуйте, Павел! Большое спасибо за обзор и за конструктивную критику.

Как многие уже возможно слышали, компания DevExpress имеет большой центр разработки в России (http://www.dxrussia.ru), и у нас даже есть небольшой блог на Хабре (http://habrahabr.ru/company/devexpress/). Поэтому, пользуясь случаем, хочу дополнить Ваш пост комментариями нашей команды разработчиков – надеюсь, эти дополнения будут полезными.

1. SelectedItem vs FocusedRow – мы признаём такую проблему и планируем исправить её в ближайшем будущем.

2. Раскраска строк через одну – обязательно сделаем, чтобы тоже работало с помощью выставления одного свойства.

3. По поводу master-detail хотелось бы заметить, что DataControlDetailDescriptor.DataControl – это Content свойство. Таким образом, синтаксис немного сокращается до такого:
<dxg:GridControl.DetailDescriptor>
    <dxg:DataControlDetailDescriptor ItemsSourcePath="Children">
            <dxg:GridControl> 
                <dxg:GridControl.View >
                    <dxg:TableView/>
                </dxg:GridControl.View>
                <dxg:GridControl.Columns>
                </dxg:GridControl.Columns>
            </dxg:GridControl>
    </dxg:DataControlDetailDescriptor>
</dxg:GridControl.DetailDescriptor>


Возможно, мы сделаем View или Columns контент-свойством для грида – чтобы еще больше упростить синтаксис. Но, согласитесь, уже получается не сильно длиннее по сравнению с остальными.

По поводу отсутствия отступов между детальным и следующим гридом – обычно горизонтального отступа вполне достаточно для вложенного грида, чтобы визуально отделить детальный грид от мастер грида. Видимо, это дело вкуса.

4. «Так же, при таком подходе байндинг свойства FocusedRow у деталь грида не работает!» Обоснованно. Тут дело в том, что грид, описанный внутри DataControlDetailDescriptor, клонируется для каждого открытого детального грида.

Это сделано для того, чтобы гриды в разных деталях могли полностью синхронизироваться между собой при сортировке, таскании/ресайзинге колонок, фильтрации и т.п. Это одно из основных требований различных пользователей к данной фиче и реализовать его при подходе, основанном на DataTemplate, как у большинства конкурентов, невозможно. Соответственно, и наложить байндинг на FocusedRow этого грида нельзя, нужна возможность задать байндинг для каждого отклонированного грида.

Скорее всего, мы добавим свойство DataControlDetailDescriptor.FocusedRowBinding (SelectedRowBinding), которое позволить прибиндиться к выбранной детальной строке внутри вью модели мастер строки.

5. Байндинг команд контекстного меню. Насколько мы понимаем, это задача сделать контекстное меню для строки или ячейки.

Если контекстное меню задается на уровне всего грида, то в дата контексте этого меню будет то же самое, что у самого грида, то есть будет желаемый результат. Но как при этом добраться до значения этой строки или ячейки, что как раз чаще всего нужно для команд уровня строки/ячейки?

В нашем гриде можно обратиться как к значениям самой строки/ячейки, так и к дата контексту грида. Мы согласны, что это неочевидно, тут нам надо серьезно думать, как упростить этот сценарий.
> в вашей тележке не менее 30% абсолютно ненужного содержимого (если вы без списка), и еще 15% пропадет в холодильнике и будет выброшено.

А что это за исследования, есть ссылка? Или так, на глаз?

Information

Rating
Does not participate
Location
Нидерланды
Registered
Activity