Используйте десериализованные данные XML в TabController + DataGrid - PullRequest
0 голосов
/ 08 августа 2011

После этого: Доступ к DataGrid с помощью кода C # и манипулирование данными внутри DataGrid Я решил, что мне следует десериализовать мои данные XML и использовать их таким образом, потому что мне нужны базовые манипуляции с CRUD в моем приложении.

У меня уже есть мой класс данных xml (используя инструмент XSD, вы можете найти этот класс здесь -> http://pastebin.com/6GWFAem6) и десериализовать мои данные, проблема:

  1. Мне нужен TabControl с таким количеством вкладок, сколько Semestre в моем xml, каждая вкладка будет иметь заголовок GPASemestre.Nome.

  2. Внутри каждой вкладки мне нужна DataGrid с Cadeiras этой конкретнойСеместр.

  3. Мне нужно иметь возможность CRUD данных в DataGrid и вкладках.

Вопросы:

  1. Чтобы решить всеэто то, что, по вашему мнению, лучше всего? Создание всего (tabs + datagrid) и создание необходимых привязок (которые я не знаю, какими они будут) / заполнение DataGrid каким-либо образом, только в C #? Или есть способ упроститькод в C # с использованием XAML?
  2. Cadeiras хранятся в массивах, поэтому каждый раз, когда я добавляю новый, мне нужно создавать новый массив (или создавать новый массив с большим количеством пробелов и управлять им), я ужевидел некоторые вопросы здесь, где люди использовали списки, но где есть троМожет, использовать список или нет?Если да, что мне нужно изменить в автоматически сгенерированном классе XSD?

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

1 Ответ

0 голосов
/ 08 августа 2011

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

Первым шагом является реализация INotifyPropertyChanged во всех свойствах, которые не являются коллекциями, чтобы при изменении свойства пользовательский интерфейс обновлялся автоматически. В лучшем случае используйте массивы только для десериализации, после этого скопируйте элементы в свойство типа ObservableCollection<T> или любую другую коллекцию, которая реализует INotifyCollectionChanged, чтобы сетки обновлялись когда новый элемент добавляется в коллекцию и никогда больше не трогает массивы.

Вы также можете сделать свойство Array «виртуальным» (не имеет поля поддержки, просто манипулирует при получении и установке), например ::

//The property & field used for binding and editing
private readonly ObservableCollection<GPASemestre> _ObservableSemestre = new ObservableCollection<GPASemestre>();
public ObservableCollection<GPASemestre> ObservableSemestre { get { return _ObservableSemestre; } }

//The property used for serialisation/deserialisation
public GPASemestre[] Semestre
{
    get
    {
        return ObservableSemestre.ToArray();
    }
    set
    {
        ObservableSemestre.Clear();
        foreach (var item in value)
        {
            ObservableSemestre.Add(item);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...