SilverlightクライアントでoDataエンドポイントを使用することを検討しています。当然、私はMVVMを実行しており、プロジェクトを素晴らしく「ブレンド可能」にしたいと考えています(つまり、デザインモードでは、oDataエンドポイントの代わりに静的データをクリーンに使用できる必要があります)。
今問題に。ViewModelsでDataServiceCollectionを使用したいのですが、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;
}
}
}
そして、「ブレンド可能な」設計時の実装:
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);
}
例外が発生します:
DataServiceCollectionでLoadAsyncメソッドを呼び出す場合は、型指定されたDataServiceQueryオブジェクトのみを指定できます。
まず、この場合、LoadAsyncの入力パラメーターをDataServiceQueryとして入力してみませんか?
第二に、私が達成しようとしていることを行うための「適切な」方法は何ですか?