WedX - журнал о программировании и компьютерных науках

Caliburn Micro: лучший подход для этого приложения

Я новичок в WPF и Caliburn Micro, и мне нужен совет по организации моего приложения.

Приложение представляет собой редактор конфигураций для платформы интеллектуального анализа данных. В приложении будет одно главное окно с сеткой и древовидным представлением в левой колонке и различными редакторами настроек в правой колонке. Какой конкретный редактор показан справа, зависит от того, какой элемент выбран в древовидном представлении. Каждый редактор состоит из нескольких элементов управления (в одном случае до 200).

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

Теперь мне интересно, как лучше организовать это приложение и как переключаться между редакторами?

14.08.2012

Ответы:


1

Предполагая, что вы используете первый подход ViewModel, проверили ли вы ISceens и реализацию Screen? Текущая загрузка Caliburn.Micro содержит демонстрационный проект с реализацией координатора экрана (SimpleMDI).

Вы можете использовать функцию «Активировать/деактивировать» в основной модели представления для управления переключением между представлениями «свойств».

Основная модель представления должна быть получена из предоставленной caliburn реализации Conductor<T>.Collection.OneActive, где T должен быть IScreen. Это позволяет вашей основной модели представления активировать только один экран за раз.

По сути, если вы привязываете «выбранный элемент» к свойству в основной модели представления, вы можете отслеживать уведомления об изменении свойства (используя NotifyOfPropertyChange), а затем использовать какую-то процедуру, чтобы решить, на какое представление переключиться.

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

Я использую что-то подобное для динамического создания экземпляров элементов управления на основе базы данных и доступных библиотек (обратите внимание, что мой пример немного сбивает с толку, поскольку CurrentView на самом деле является настраиваемым типом и на самом деле не является представлением — это просто объект базы данных, который описывает элемент управления это было выбрано.. Я, вероятно, должен изменить это!)

public MainPageViewModel : Caliburn.Micro.Conductor<IScreen>.Collection.OneActive
{
    #region Property Changed handler

    public override void NotifyOfPropertyChange(string propertyName)
    {
        base.NotifyOfPropertyChange(propertyName);

        // A property changed, update the views if it's the CurrentView property
        UpdateViews(propertyName);
    }

    #endregion

    private void UpdateViews(string propertyName)
    {
        // If the selected item in my list changes, it's bound to CurrentView and contains
        // the fully qualified typename of the ViewModel that the items 'screen' should use
        if (propertyName == "CurrentView")
        {
            // If the selected item changes we need to load the control or retrieve it from the
            // control cache, making sure to update the cache and the active view dictionary
            try
            {                    
                var controlType = Type.GetType(CurrentView.QualifiedTypeName, true);

                // Check to see if the view is already loaded
                var view = GetChildren().FirstOrDefault(x => x.GetType() == controlType);

                // If it is, just activate it
                if (view != null)
                {
                    ActivateItem(view);
                }
                else
                {
                    // Otherwise it's not loaded, load it and activate it
                    view = (IScreen)Activator.CreateInstance(controlType);
                    ActivateItem(view);

                }
         // etc...
    } 
}
20.08.2012
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]