【问题标题】:RIA services: Load returning no dataRIA 服务:加载不返回数据
【发布时间】:2011-02-18 07:09:14
【问题描述】:

在 nikhilk Kothary 的 BookClub 示例应用程序中,组合框用于显示图书类别。

viewmodel 类中是这样的(应用程序使用的是 MVVM 模式):

私有 ReferenceDataContext _referenceData;

public BookClubModel() { // 构造函数 _referenceData = new ReferenceDataContext();

_referenceData.Load(_referenceData.GetcategoriesQuery(), false);

}

那么有一个comboxbox绑定的属性:

公共 IEnumerable 类别 { 得到 { 返回_referenceData.Categories; } }

为什么会这样?我们不应该为加载操作提供一个“已完成”的事件处理程序吗?

如果我想在构造函数中填充一个 IEnumerable 属性,那么它不起作用:

私有 ReferenceDataContext _referenceData;

私有 IEnumerable _categories;

public BookClubModel() { // 构造函数 _referenceData = new ReferenceDataContext();

_referenceData.Load(_referenceData.GetcategoriesQuery(), false);

_categories = _referenceData.Categories; _referenceData.Categories was what we were returning in the Categories property above.

}

为什么它在一种情况下有效,而在另一种情况下无效?

丹尼尔

【问题讨论】:

    标签: silverlight binding service ria


    【解决方案1】:

    在第一种情况下,Categories 是对_referenceData.Categories 的引用。而当_referenceData.Categories 集合更新时,Categories 也更新了。

    在第二种情况下,您需要Load 操作的事件处理程序,然后对加载的实体执行您想要的操作。

    在内部,当您调用 Load 时,正在执行对数据库的查询,当获取结果时调用加载操作回调。加载操作是异步操作,你需要记住这一点

    【讨论】:

    • 但它是如何在内部工作的? _referenceData.Categories 正在从上下文中获取类别列表,并且一旦加载,属性就会更新?这是否意味着我们不必总是进行异步加载?
    • 在内部调用加载时,正在执行对数据库的查询,当获取结果时调用加载操作回调。加载操作是异步操作,您需要记住这一点
    • 好的 :-) 我现在明白了 ;-) 非常感谢 ultor!
    • 还有一个问题。我了解委托的加载操作,但对于“类别”属性的情况,它是如何工作的?首先,我在构造函数中加载查询,但我没有任何委托。当我稍后使用“return -referenceData.Categories”时,它如何获取数据?为什么当我写“_categories = _referenceData.Categories”时,集合更新时_categories没有更新?它也是对 _reference.Categories 的引用。
    • 如果只返回对 _referenceData.Categories 的引用,而不是值。当加载操作完成时,这个引用会在内部由上下文更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多