当我使用DelegateCommand进行Binding时,我在代码中看到错误。在其方法中,我调用了1个asyc服务,该服务调用arcgis服务器以使用任务服务查找城市名称。
我对Prism 4.1支持异步感到困扰?如果没有,有什么工作吗?
public DelegateCommand SearchCitiesCommand;
private PlaceFinderService placeFinderService;
public GenericMapViewModel()
{
HelloMapMessage = "Generic Map Pow Pow !!";
placeFinderService = new PlaceFinderService();
SearchCitiesCommand = DelegateCommand. //new DelegateCommand(Search);
}
public virtual async Task Search()
{
List<Graphic> graphics=await placeFinderService.FindAsync(SearchText);
SearchResults = graphics;
}
ASYN服务
public class PlaceFinderService
{
TaskCompletionSource<List<Graphic>> tcs;
public Task<List<Graphic>> FindAsync(String searchText)
{
FindParameters findParams = new FindParameters();
findParams.LayerIds.AddRange(new int[] { 0 }); // cities layer
findParams.SearchFields.AddRange(new string[] { "CITY_NAME" });
findParams.SpatialReference = new SpatialReference(4326);
findParams.SearchText = searchText;
FindTask findTask = new FindTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer");
tcs = new TaskCompletionSource<List<Graphic>>();
findTask.ExecuteCompleted += FindTaskExecuteCompleted;
findTask.Failed += findTaskFailed;
return tcs.Task;
}
private void findTaskFailed(object sender, TaskFailedEventArgs e)
{
tcs.TrySetResult(new List<Graphic>());
}
private void FindTaskExecuteCompleted(object sender, FindEventArgs e)
{
List<Graphic> graphics = new List<Graphic>();
foreach (var result in e.FindResults)
{
graphics.Add(result.Feature);
}
tcs.TrySetResult(graphics);
}
}
我看到很少http://prismwindowsruntime.codeplex.com/discussions/535816,但我认为它是棱镜5。
答案 0 :(得分:1)
据我所知,没有MVVM框架支持“异步命令”。 IMO,这是因为有很多不同的语义可能性。
我有MSDN article您可能会觉得有帮助。它提供了一些想法(和示例实现),但在一天结束时,您将不得不制作自己的“AsyncCommand”,因为确切的语义将取决于您的应用程序的需求。