Объединение .NET RIA Services и MVVM в Silverlight 3.0 - PullRequest
8 голосов
/ 13 апреля 2009

При использовании .NET RIA Services и MVVM в Silverlight 3.0 есть ли разница между типом метаданных из RIA Services и ViewModel из шаблона MVVM? Это одно и то же или они должны быть отдельными?

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

Я искал вокруг, но я не видел ничего такого, что говорило бы об этом ни в каких деталях.

Ответы [ 2 ]

11 голосов
/ 19 апреля 2009

Согласен с ChuckJ - как правило, DomainContext является частью модели представления. Например, скажем, у меня была страница поиска, которая позволяла искать по каталогу продуктов. Вот как я бы структурировал вещи:

На сервере:

class Catalog : DomainService {
    IQueryable<Product> GetProducts(string keyword) { ... }
}

Сгенерированный DomainContext:

class Catalog : DomainContext {
    EntityList<Product> Products { get; }
    void LoadProducts(string keyword);
}

Вид модели, которую я написал бы:

class SearchViewModel {
    Catalog _catalog = new Catalog();

    public IEnumerable<Product> Results {
        get { return _catalog.Products; }
    }

    public void Search(string keyword) {
        _catalog.Products.Clear();
        _catalog.LoadProducts(keyword);
    }
}

И, наконец, в моем xaml я установил DataContext моего UserControl как экземпляр SearchViewModel и привязал ItemsControl к свойству Results. Я бы использовал шаблон ViewModel по вашему выбору, чтобы привязать нажатие кнопки к поиску (что фактически является командой, которую предоставляет SearchViewModel). Мне лично нравится то, с чем я работаю Silverlight.FX , например:

<Button Content="Search"
  fxui:Interaction.ClickAction="$model.Search(keywordTextBox.Text)" />

и, как первоначально показано здесь .

Как упоминает Чак, у меня действительно может быть другое состояние в моей модели представления, например, SelectedProduct, который может быть двусторонне связан с SelectedItem объекта ListBox в моем xaml, а затем связать тот же SelectedProduct, что и DataContext объекта. DataForm для отображения сведений о выбранном продукте.

Надеюсь, это поможет! Об этом я скоро еще напишу в своем блоге 1024 *.

1 голос
/ 15 апреля 2009

Контекст данных служб RIA был разработан, чтобы играть роль ViewModel в шаблоне MVVM, поскольку они изначально поддерживают привязку данных, но не используют этот термин в своей документации. Однако это действительно зависит. Вам, вероятно, понадобится состояние в вашей модели представления, чем обеспечивает контекст данных RIA, такой как команды и другое связанное с представлением состояние. Я думаю, что вы хотите сделать, это использовать контексты данных из сервисов RIA как часть модели представления.

...