- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在考虑在我的 Silverlight 客户端中使用 oData 端点。自然地,我在做 MVVM,我希望项目很好并且“可混合”(即,在设计模式下,我必须能够干净地使用静态数据而不是 oData 端点。)
现在来解决问题。我想在我的 ViewModel 中使用 DataServiceCollection,因为它允许很好的可绑定(bind)集合,而不必担心 BeginExecute/EndExecute 等。
现在,让我们看一些代码。我的模型界面如下所示:
public interface ITasksModel
{
IQueryable<Task> Tasks { get; }
}
public class TasksModel : ITasksModel
{
Uri svcUri = new Uri("http://localhost:2404/Services/TasksDataService.svc");
TaskModelContainer _container;
public TasksModel()
{
_container = new TaskModelContainer(svcUri);
}
public IQueryable<Task> Tasks
{
get
{
return _container.TaskSet;
}
}
}
public class DesignModeTasksModel : ITasksModel
{
private List<Task> _taskCollection = new List<Task>();
public DesignModeTasksModel()
{
_taskCollection.Add(new Task() { Id = 1, Title = "Task 1" });
_taskCollection.Add(new Task() { Id = 2, Title = "Task 2" });
_taskCollection.Add(new Task() { Id = 3, Title = "Task 3" });
}
public IQueryable<Task> Tasks
{
get {
return _taskCollection.AsQueryable();
}
}
}
public TaskListViewModel(ITasksModel tasksModel)
{
_tasksModel = tasksModel;
_tasks = new DataServiceCollection<Task>();
_tasks.LoadAsync(_tasksModel.Tasks);
}
Only a typed DataServiceQuery object can be supplied when calling the LoadAsync method on DataServiceCollection.
最佳答案
LoadAsync 需要 DataServiceQuery 的原因是普通的 IQueryable 没有定义执行查询的异步方式。该方法采用 IQueryable 类型作为其参数的原因是,用户不必将查询对象显式转换为 DataServiceQuery(使代码更短),并且由于我们假设用户将尝试至少运行一次他们的代码,他们会立即查看错误(就像您所做的那样)。
LoadAsync 只支持异步操作,所以需要DataServiceQuery。如果您已经有了结果(无需执行异步请求),您可以调用 Load 方法。这是你第二个问题的答案。您可以将 LoadAsync 用于设计时,将 LoadAsync 用于运行时,而不是同时调用设计时和运行时。但是由于跟踪约束,您可能需要以不同的方式创建 DataServiceCollection。
像这样的东西:
DataServiceCollection<Task> dsc;
DataServiceQuery<Task> dsq = _tasksModel as DataServiceQuery<Task>;
if (dsq != null)
{
dsc = new DataServiceCollection<Task>();
dsc.LoadAsync(dsq);
}
else
{
dsc = new DataServiceCollection<Task>(myDataServiceContext);
dsc.Load(_tasksModel);
// Invoke the LoadAsyncCompleted handler here
}
关于silverlight - 在我的 ViewModel 中使用 DataServiceCollection 时如何实现 "Blendability",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3029331/
我正在考虑在我的 Silverlight 客户端中使用 oData 端点。自然地,我在做 MVVM,我希望项目很好并且“可混合”(即,在设计模式下,我必须能够干净地使用静态数据而不是 oData 端点
我有一套现有的 Silverlight 应用程序,使用 MVVM 模式来分离 View 和 View 模型。我们使用 Unity 2.0 作为 IoC 容器将依赖项注入(inject) ViewMod
我是一名优秀的程序员,十分优秀!