Какова лучшая практика для доступа к модели с использованием шаблона MVVM - PullRequest
4 голосов
/ 24 февраля 2010

У меня есть база данных, которая взаимодействует с веб-сервисами с моей моделью (собственным потоком) и предоставляет объекты данных. Мое приложение пользовательского интерфейса состоит из различных видов, ViewModels и пользовательских элементов управления. Я использую ServiceProvider (IServiceProvider) для доступа к модели и маршрутизации событий в поток пользовательского интерфейса. Связь между ViewModels осуществляется Messenger.

Это путь?

Мне также было интересно, как лучше всего структурировать объекты DataObjects

На данный момент у меня есть объекты DataObject, которые имеют иерархическую структуру, но не поддерживают INotifyProperty, хотя список детей имеет тип ObservableCollection. У меня нет возможности реализовать notifypropertychange для свойств.

Мне было интересно, как сделать их дружелюбными к MVVM. Реализация частичного класса и добавление всех необходимых свойств или команд или перенос всех объектов DataObjects и синхронизация списка моделей и списка MVVM.

Все мысли и идеи приветствуются.

Ответы [ 2 ]

1 голос
/ 30 марта 2010

Я бы согласился с Бермо с примечанием, что не многие люди не соблюдают эту схему строго. Может напрямую представлять объекты Model и реализовывать INotifyPropertyChanged в этих объектах. Но ниже приведены основные средства, которые вы можете использовать для реализации того, что у вас есть:

class PersonViewModel : INotifyPropertyChanged
{
    Person p = new Person();

    public string First
    {
        get { return p.First; }
        set
        {
            p.First = value;
            onPropertyChanged("First");
        }
    }

    public string Last
    {
        get { return p.Last; }
        set
        {
            p.Last = value;
            onPropertyChanged("Last");
        }
    }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    private void onPropertyChanged(string propertyName)
    {
        if (PropertyChanged!=null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName);
        }
    }

    #endregion
}

Я лично создал класс ViewModel для наследования, чтобы я мог поместить туда свой код INotifyPropertyChanged и не вводить его повторно. Тогда мои реализации просто наследуются от этого базового класса.

1 голос
/ 29 марта 2010

Строгое внедрение MVVM означает, что вы должны создать классы ViewModel, которые предоставляют все объекты DataObject (ваша модель), которые будут использовать представление - представление не должно иметь прямого доступа к модели.

После этого вы получите полный контроль над вашей ViewModel и сможете реализовывать события INotifyPropertyChange и синхронизировать ViewModel с моделью при каждом уведомлении об изменении или при определенных действиях.

...