代码之家  ›  专栏  ›  技术社区  ›  Robert Kozak

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

  •  8
  • Robert Kozak  · 技术社区  · 16 年前

    在Silverlight 3.0中使用.NET RIA Services和MVVM时,RIA Services的元数据类型与MVVM模式的ViewModel之间是否存在差异?这些是同一件事还是应该分开?

    元数据类型是分部实体类的密封内部类。这里似乎没有适当的分隔,但是元数据类型也可以用验证属性来修饰,使其看起来像一个视图模型。

    我到处找过,但没有看到任何细节。

    2 回复  |  直到 16 年前
        1
  •  11
  •   Nikhil Kothari    16 年前

    同意Chuckj——通常,域上下文是视图模型的一部分。例如,假设我有一个允许根据产品目录进行搜索的搜索页面。以下是我的结构:

    在服务器上:

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

    生成的域上下文:

    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模式绑定一个按钮单击搜索(这实际上是SearchViewModel公开的命令)。我个人喜欢和我一起工作的东西 Silverlight.FX 如:

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

    如最初所示 here .

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

    希望有帮助!我会在我的博客上多写一些 blog 很快。

        2
  •  1
  •   chuckj    16 年前

    RIA服务数据上下文设计为在MVVM模式中扮演ViewModel的角色,因为它们本机支持数据绑定,但在文档中不使用该术语。不过,这要看情况而定。您可能需要视图模型中的状态,而不是RIA数据上下文提供的状态,例如命令和其他与视图相关的状态。我认为您要做的是将RIA服务中的数据上下文用作视图模型的一部分。