在Silverlight 3.0中结合.NET RIA服务和MVVM

Rob*_*zak 8 silverlight ria mvvm silverlight-3.0 wcf-ria-services

在Silverlight 3.0中使用.NET RIA Services和MVVM时,RIA Services的Metadata类型和MVVM模式的ViewModel之间存在差异吗?这些是相同的还是应该分开?

元数据类型是部分Entity类的密封内部类.似乎没有适当的分离,但元数据类型也可以使用Validation的属性进行修饰,使其看起来像ViewModel.

我一直在四处寻找,但我没有看到任何有关这方面的细节.

Nik*_*ari 11

同意ChuckJ - 通常DomainContext构成视图模型的一部分.例如,假设我有一个允许搜索产品目录的搜索页面.这是我如何构建的东西:

在服务器上:

class Catalog : DomainService {
    IQueryable<Product> GetProducts(string keyword) { ... }
}
Run Code Online (Sandbox Code Playgroud)

生成的DomainContext:

class Catalog : DomainContext {
    EntityList<Product> Products { get; }
    void LoadProducts(string keyword);
}
Run Code Online (Sandbox Code Playgroud)

我会写的视图模型:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

最后在我的xaml中,我将UserControl的DataContext设置为SearchViewModel的一个实例,并将ItemsControl绑定到Results属性.我将使用您选择的ViewModel模式将按钮单击绑定到Search(这实际上是SearchViewModel公开的命令).我个人喜欢我使用Silverlight.FX的东西,如:

<Button Content="Search"
  fxui:Interaction.ClickAction="$model.Search(keywordTextBox.Text)" />
Run Code Online (Sandbox Code Playgroud)

并且初步显示出在这里.

正如Chuck提到的,我可能确实在我的视图模型中有其他状态,例如,可能与我的xaml中的ListBox的SelectedItem双向绑定的SelectedProduct,然后将相同的SelectedProduct绑定为DataForm的DataContext以显示所选产品的详细信息.

希望有所帮助!我很快就会在我的博客上写博客.