在Silverlight 3.0中使用.NET RIA Services和MVVM时,RIA Services的Metadata类型和MVVM模式的ViewModel之间存在差异吗?这些是相同的还是应该分开?
元数据类型是部分Entity类的密封内部类。似乎没有适当的分离,但元数据类型也可以使用Validation的属性进行修饰,使其看起来像ViewModel。
我已经四处寻找,但我没有看到任何有关此细节的内容。
答案 0 :(得分: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中,我将UserControl的DataContext设置为SearchViewModel的一个实例,并将ItemsControl绑定到Results属性。我将使用您选择的ViewModel模式将按钮单击绑定到Search(这实际上是SearchViewModel公开的命令)。我个人喜欢与Silverlight.FX合作的内容,如:
<Button Content="Search"
fxui:Interaction.ClickAction="$model.Search(keywordTextBox.Text)" />
并且最初显示为here。
正如Chuck提到的,我的视图模型中可能确实有其他状态,例如,可能与我的xaml中的ListBox的SelectedItem双向绑定的SelectedProduct,然后将相同的SelectedProduct绑定为a的DataContext。 DataForm显示所选产品的详细信息。
希望有所帮助!我很快就会在我的blog上写一些关于此的博客。
答案 1 :(得分:1)
RIA服务数据上下文旨在在MVVM模式中扮演ViewModel的角色,因为它们本身支持数据绑定,但它们不在文档中使用该术语。但是,这真的取决于。您可能需要在视图模型中使用状态,而不是RIA数据上下文提供的命令和其他视图相关的状态。我想你想要做的是使用RIA服务中的数据上下文作为视图模型的一部分。