2009-04-13 2 views
8

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

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

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

ответ

11

Согласен с 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 и связал бы ItemContr ol до свойства Results. Я бы использовал шаблон ViewModel по вашему выбору, чтобы привязать кнопку «Поиск» (которая фактически является командой, которую предоставляет SearchViewModel). Лично мне нравится то, что я, работая с Silverlight.FX как в:

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

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

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

Надеюсь, что это поможет! Я буду вести блог об этом еще немного на моем blog в ближайшее время.

+0

После некоторой мысли за прошедшую неделю я думаю, что это то, о чем я думал. DomianContext - это не полный ViewModel, а его часть.Должны ли атрибуты, определенные в метаданныхType DomainService (например [Required]), быть обновлены в ViewModel или тот факт, что DomainContext является частью ViewModel, достаточным для того, чтобы быть воспринятым механизмом проверки? –

+0

Ссылка на сообщение в блоге Nikhil: http://www.nikhilk.net/Entry.aspx?id=229 –

+0

Атрибуты метаданных [Обязательный] и т. Д. Относятся к типам сущностей, а не к самой модели представления. Они будут подняты, если вы выставляете экземпляр объекта из модели представления (например, продукты в примере модели представления выше). –

1

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

+0

Чем больше я смотрю на это, я думаю, что я хочу как можно больше скрыть EntityObject и его MetaDataType. Я думаю, что вы правы, что я, вероятно, хочу DataContext в ViewModel, но также хочу удалить внутренний класс MetaData из EntityObject и перенести его в ViewModel. Верный? –

+0

Подождите. Это тоже звучит не так. Я думаю, что класс MetaData должен быть на стороне сервера и ViewModel на клиенте. Тьфу. Может быть, ViewModel принадлежит как Общий код? –

+0

После рецензирования сегодня утром я наконец понял, что вы ответили на этот вопрос. Привет, Чак, долгое время не вижу. Жизнь надежды хорошо относится к вам. –

 Смежные вопросы

  • Нет связанных вопросов^_^