-
Notifications
You must be signed in to change notification settings - Fork 10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
RevitAxonometryViews: Создан плагин #80
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Универсальный фильтр по обоим полям
- Критерий фильтрации делаем комбобоксом в явном виде
- галочку комбинировать рядом с комбобоксом
- RevitPlugins привести GUI к одному cтандарту и инициализацию
- Разрешить растягивать окно
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
MainViewModel:
На активный вид надо проверять сразу перед запуском плагина, где у тебя проверка на документ семейства. Сейчас, если жмакнуть галочки и нажать отмену, ревит упададет из-за того, что после уничтожения RevitRepository после закрытия окна попытается выполнить метод CanCreateViews, который дергает свойство ActiveUIDocument уже умершего RevitRepository.
Не используй конструктор new RelayCommand. Используй фабричный метод RelayCommand.Create. Также есть типизированная перегрузка RelayCommand.Create, где T - тип параметра, передаваемого в метод команды (твой HeaderClick). И соответственно сразу можно сделать строковый параметр (HeaderClick(string columnName)).
Метод RaiseAndSetIfChanged уже внутри себя проверяет, что новое значение не равно текущему значению, и только если не равно, то назначает это новое значение полю. Поэтому твои проверки value не нужны.
FilteredView можешь сделать не List, а ObservableCollection и при смене фильтра очищать его и заполнять объектами из твоего _hvacSystems, удовлетворяющими фильтру. Тип самого поля _hvacSystems лучше сделать не List, а IReadonlyCollection, т.к. ты его только читаешь.
https://learn.microsoft.com/ru-ru/dotnet/api/system.collections.objectmodel.readonlycollection-1?view=netframework-4.8
https://learn.microsoft.com/ru-ru/dotnet/api/system.collections.generic.ireadonlycollection-1?view=netframework-4.8
Свойство FilterCriterion у тебя назначается один раз при старте окна и больше не меняется. Его можно сделать обычным массивом строк и оставить только геттер, а лучше сделать также IReadOnlyCollection и задать значение по умолчанию с твоими двумя параметрами. set не нужен ему.
HvacSystemViewModel:
Т.к. свойства SystemName и SharedName использются только для чтения и устанавливаются в конструкторе, лучше оставить только get и убрать set.
AxonometryConfig:
Добавь его в контейнер kernel как и остальные классы, чтобы не вызывать конструктор самому. Чтобы передать Document ему можно использовать несколько методов из ninject, например WithConstructorArgument
SystemCategories у тебя сейчас это статическое публичное поле с типом List. Такое комбо делат не надо. Сделай публичное свойство доступное только для чтения (только get) с типом IReadonlyCollection. И чтобы это свойство не создавало каждый раз при get коллекцию, сделать приватное поле с тем же типом IReadonlyCollection, в котором ты будешь хранить саму, а свойство будет возвращать ссылку на это поле.
CollectorOperator:
Методы расширения лучше сделать обычными методами и весь класс сделать не статическим, а обычным. И зарегистрировать его в kernel и использовать как сервис.
Вместо явных типов параметров методов и возвращаемых типов (List) лучше писать интерфейсы. В текущей реализации тебе спокойно подойдет ICollection на вход и IList для возвращаемого типа.
CreationViewRules:
у категории сразу можно взять category.Id. Не зачем делать new ElementId(category.GetBuiltInCategory())
Тип свойства Cagtegories можно мпоменять на ICollection
RevitRepository:
Имеет смысл в методе GetSharedSystemName принимать на вход не Element, а родительский класс систем MEPSystem. Соответственно в том месте, где ты вызываешь этот метод, надо будет кастить Element к этому MEPSystem через LINQ - посмотри методы OfType, Cast.
ViewFactory:
Можно добавить в контейнер kernel и использовать как сервис.
Строковые литералы лучше вынести в приватные константы класса.
MainWindow:
Думаю, будет хорошо добавить сортировку сразу при смене названия параметра в комбобоксе.
Смену сортировки по возрастанию/убыванию по клику на название столбца сейчас можно сделать, если сначала кликнуть на заголовок одного столбца, потом на заголовок другого. Возможно проще перейти на DataGrid для реализации сортировки. Внешний вид его можно настроить, чтобы он был похож на ListView.
Следует добавить минимальные/максимальные значения для ширины столбцов.
Надо подправить стиль кода xaml: каждое свойство на отдельной строке, скобки тэгов (">", "/>") не переносить по строкам.
Высоту кнопок "ОК", "Отмена" сделай как в остальных плагинах в платформе (25 пикселей)
Также надо удалить файлы локализации, или перейти полностью на них, реализовав локализацию ru-RU и en-US.
…, вычитка кода XAML
… равно текущему значению, и только если не равно, то назначает это новое значение полю. Убираю проверки на равенство value
… его IReadOnlyCollection.
…раемся оставлять только интерфейсы
Создан плагин для копирования видов с применением фильтров по выбранному параметру.
Возможности:
Фильтрация может проходить параметрам "Имя системы" или "ФОП_ВИС_Имя системы"