ADN Club > Revit API
Работа с WindowForms.
Андрей1986:
У меня есть коллектор с определенными видами уровней и в каждой модели они свои. Я же не могу привязываться к имени? Мне этот список можно как-то создать и перечислить по Id и Name уровни? Как можно это написать?
Алексей Кулик:
Можно попытаться поменять прямую реализацию LevelRepository на некий абстрактный GenericReository или вообще интерфейс, и в каждом конкретном случае подсовывать свою реализацию. Я не шарю в Revit и его API, так что более подробно уже точно не скажу.
Off-Topic: показатьЯ у себя в коде примерно так и сделал - отдельный интерфейс, и пара его реализаций - одна для реальной работы с файлами dwg, вторая для тестов и обработки фейковых данных.
А что значит "в каждой модели они свои"? Общие-то свойства какие-то есть, верно? И потом, я сделал элементарнейший вариант. Барин, дай пару часов, с работой подразобраться надо :)
Алексей Кулик:
Так, пока слегка отпустило. Допустим, что Level у тебя становится нечто типа:
--- Код - C# [Выбрать] ---namespace WindowsFormsApp1.Entities{ public class Level { public int Id { get; set; } public string Name { get; set; } public string BaseRevitFileName { get; set; } public bool IsTemplate { get; set; } }}И вместо Name тебе надо показывать и BaseRevitFileName, и собственно Name (уж откуда и как ты будешь это выцеплять - проблема того самого LevelRepository ;)).
Тогда есть два варианта:
Добавлять "напрямую, в лоб и без протокола":
--- Код - C# [Выбрать] --- foreach (Level item in levels) { checkedListBox1.Items.Add(item.BaseRevitFileName + " => "+ item.Name); checkedListBox1.SetItemChecked(pos, item.IsTemplate); pos++; }Либо ради приколу переопределить ToString для Level:
--- Код - C# [Выбрать] ---namespace WindowsFormsApp1.Entities{ public class Level { public int Id { get; set; } public string Name { get; set; } public string BaseRevitFileName { get; set; } public bool IsTemplate { get; set; } public override string ToString() { return $"{BaseRevitFileName} >> {Name}"; } }} И тогда вставка становится попроще:
--- Код - C# [Выбрать] --- foreach (Level item in levels) { checkedListBox1.Items.Add(item); checkedListBox1.SetItemChecked(pos, item.IsTemplate); pos++; }Учитывая далеко ненулевую вероятность, что аналогичное представление понадобится еще в тысяче разных мест, я б, наверно, пошел по второму пути
Андрей1986:
Алексей, спасибо, что уделил время! Молниеносно реагируешь. А в сообществе писал, что только переходишь на C#(всем бы так). ;) ;D
Мне это нужно попробавать...
Алексей Кулик:
Off-Topic: показатьДык я и не перешел еще. Мне до перехода как до Луны и обратно. Пешком :)
Навигация
Перейти к полной версии