Управляемое метафайлами приложение WPF на основе XML - PullRequest
0 голосов
/ 19 апреля 2011

Я работаю над приложением BI в WPF.Я нахожусь в процессе проектирования его архитектуры и в поисках способа напрямую привязать элементы управления в представлении к XML, который содержит метаданные представления.Как вы думаете, это будет возможно?тогда как?или целесообразно считывать из xml и генерировать представления соответственно?

Отредактировано

Свойства, такие как цвета диаграмм, которые создали диаграмму, следующая диаграммапосле детализации диаграммы имена пользователей и их пароли, имена групп пользователей и т. д. сохраняются в файлах XML.Когда пользователь запускает приложение, должны отображаться созданные им инструментальные панели;это происходит при извлечении данных из серверной части и назначении правильных цветов диаграммы.Поэтому, если эти данные доступны в XML, мой вопрос - лучший способ для создания диаграмм и панелей мониторинга по запросу пользователя.

Отредактировано Screenshot of a dashboard we currently load from xml, through a normal read write operation

Как яКак было объяснено ранее, проблема заключается в том, чтобы хранить метаданные, связанные с этим приложением, наиболее эффективным и структурированным способом для обратного вызова при входе пользователя в систему.

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 19 апреля 2011

Я думаю, что лучшим в вашем случае было бы разделить все возможные данные в системе на классы данных - метатипы.после этого в xml укажите метатип данных, чтобы ваши данные всегда имели метатип.И когда перед созданием представления вы должны прочитать все метатипы для данных, которые вы намереваетесь отображать, и создать элементы управления экраном в соответствии с этими метатипами.После этого вы можете загрузить и отобразить данные.Такой подход хорошо работает в моей маленькой программе, и я думаю, что он даст хорошие результаты и в вашей системе.

[РЕДАКТИРОВАТЬ]
ОК, ваше приложение включает в себя бизнес-домен (ваши бизнес-данные, бизнес-логика и правила отображения данных).Все эти вещи вы разделили на три части: Model, View и ViewModel.Как я правильно понимаю, ваш вопрос правдив о ViewModel.
Например, ваше гипотетическое приложение содержит информацию о сотруднике и предполагает, что каждый сотрудник может иметь три типа информации о себе:

  1. Личная информация (Имя, дата рождения, фото, домашний адрес, номер мобильного телефона *
  2. Информация об образовании (информация об образовании, список пройденных учебных курсов)
  3. Информация о профессиональном опыте (список успешно завершенных коммерческих проектов)

Итак, у нас есть домен - сотрудник.Этот домен можно разделить на три метатипа:

  1. Персональный метатип
  2. Метатип образования
  3. Метатип профессионального опыта

Для каждого метатипа мыдолжен создать подэкран, который будет отображать информацию метатипа в соответствии с бизнес-правилами.Я рекомендую вам создавать подэкраны метатипа с шаблоном MVC, потому что в случае редактирования данных может быть применено какое-то специальное правило редактирования или проверка данных.После создания каждого подэкрана мы можем свободно отображать метаинформацию каждого типа в системе.
Например, ваше приложение загрузило информацию о сотруднике.После этого вы можете определить, какой метатип представлен в загруженных данных и может принудительно создать соответствующие подэкраны.Последняя часть работы - передача соответствующих данных на каждый подэкран.


Это было очень расплывчатое объяснение, извините за мой английский, если у вас есть какие-либо вопросы по поводу того, что я объяснил, не стесняйтесь и задайте вопрос снова

1 голос
/ 20 апреля 2011

Я предложу использовать XAML вместо XML.

XAML не только позволит вам определить пользовательский интерфейс, но XAML также может содержать ваши другие метаданные или информацию о конфигурации, которые вы можете читать / записывать в форме XAML непосредственно в ваш класс CLR.

Преимущества,

  1. Сериализация Xaml точно такая же, как и сериализация Xml
  2. Xaml даст вам мощный intellisense при редактировании в Visual Studio (xml также может дать, но вам придется создавать и обновлять схему каждый раз, когда вы вносите изменения в схему конфигурации)
  3. В случае intellisense лучше использовать Xaml, поскольку он автоматически выдаст ошибки проверки
  4. Это также позволит вам использовать Enums
  5. Он также будет скрывать / показывать элементы или классы на основе иерархии наследования
  6. Вы также можете загрузить XAML из строки, поступающей из базы данных
  7. Это позволит вам также указывать привязки, если ваш объект является производным от DependencyObject, и вы сможете передавать или повторно использовать привязки в вашем пользовательском интерфейсе

Например,

public class ScreenElement{
    public string Author {get;set;}
    public DateTime DateCreated {get;set;}
}

// XAML can not directly deal with generics so this step is
// necessary
public class ScreenElements : ObservableCollection<ScreenElement>
{
}

[ContentProperty("Elements")]
public class Screen
{
    public Screen(){
        this.Elements = new ScreenElements();
    }
    public string Title{get;set;}
    public bool ToolbarPresent {get;set;}

    // this attribute is necessary if 
    // you want to save Screen to xaml
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    public ScreenElements Elements {get; private set;}
}

И ваш экран xaml может выглядеть как

<Screen xmlns="clr-namespace:MyNamespace"
        Title="Home Screen"
        ToolbarPresent="false"
        >
    <ScreenElement Author="Myself" DateCreated="..."/>
    <ScreenElement Author="Yourself" DateCreated="..."/>
</Screen>

Вы можете создать ресурс XAML и загрузить его как ...

Screen s = XamlReader.Load(.. resource uri to your XAML)
// and now you can use your "s" loaded with elements to 
// populate your UI

foreach(ScreenElement e in s.Elements){
    // use attributes of e to populate things..
}
1 голос
/ 19 апреля 2011

Я не уверен, что понимаю, что вы собираетесь делать. Если вы просто хотите привязать некоторые свойства элемента управления пользовательского интерфейса к данным в документе XML, это вполне возможно. Я писал об этом много лет назад здесь .

...