Я смотрю на использование конечных точек oData в моем клиенте Silverlight.Естественно, я делаю MVVM и хочу, чтобы проект был красивым и «смешиваемым» (т.е. я должен иметь возможность чисто использовать статические данные вместо конечных точек oData в режиме разработки.)
Теперь перейдем кпроблема.Я хотел бы использовать DataServiceCollection в моих ViewModels, поскольку он позволяет создавать красивые привязываемые коллекции, не беспокоясь о BeginExecute / EndExecute и т.д.Интерфейс моей модели выглядит следующим образом:
public interface ITasksModel
{
IQueryable<Task> Tasks { get; }
}
Реализация конечной точки oData этого интерфейса:
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;
}
}
}
И реализация "Blendable" времени разработки:
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();
}
}
}
Однако, когда я пытаюсь использовать этот последний в своем конструкторе ViewModel:
public TaskListViewModel(ITasksModel tasksModel)
{
_tasksModel = tasksModel;
_tasks = new DataServiceCollection<Task>();
_tasks.LoadAsync(_tasksModel.Tasks);
}
Я получаю исключение:
При вызове может быть предоставлен только типизированный объект DataServiceQuery.метод LoadAsync для DataServiceCollection.
Прежде всего, если это так, почему бы не сделать тип входного параметра LoadAsync типом DataServiceQuery?
Во-вторых, каков «правильный» способ сделать то, что я пытаюсь достичь?