在 Silverlight 3.0 中使用 .NET RIA 服务和 MVVM 时,RIA 服务中的元数据类型和 MVVM 模式中的 ViewModel 有区别吗?这些是同一件事还是应该分开?
元数据类型是部分实体类的密封内部类。那里似乎没有适当的分离,但元数据类型也可以用 Validation 的属性进行修饰,使其看起来像 ViewModel。
我四处寻找,但我没有看到任何关于这个的详细信息。
在 Silverlight 3.0 中使用 .NET RIA 服务和 MVVM 时,RIA 服务中的元数据类型和 MVVM 模式中的 ViewModel 有区别吗?这些是同一件事还是应该分开?
元数据类型是部分实体类的密封内部类。那里似乎没有适当的分离,但元数据类型也可以用 Validation 的属性进行修饰,使其看起来像 ViewModel。
我四处寻找,但我没有看到任何关于这个的详细信息。
同意 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 提到的,我的视图模型中可能确实有其他状态,例如,SelectedProduct 可能双向绑定到我的 xaml 中 ListBox 的 SelectedItem,然后将相同的 SelectedProduct 绑定为 DataForm 的 DataContext 以显示所选产品的详细信息。
希望有帮助!我很快就会在我的博客上写更多关于这个的博客。
RIA 服务数据上下文被设计为在 MVVM 模式中扮演 ViewModel 的角色,因为它们本机支持数据绑定,但它们在文档中不使用该术语。但是,这真的取决于。您可能需要视图模型中的状态,而不是 RIA 数据上下文提供的命令和其他视图相关状态。我认为您想要做的是使用来自 RIA 服务的数据上下文作为视图模型的一部分。