DelegateCommand异步支持Prism 4.1

时间:2014-07-28 17:43:31

标签: silverlight prism arcgis

当我使用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。

1 个答案:

答案 0 :(得分:1)

据我所知,没有MVVM框架支持“异步命令”。 IMO,这是因为有很多不同的语义可能性。

我有MSDN article您可能会觉得有帮助。它提供了一些想法(和示例实现),但在一天结束时,您将不得不制作自己的“AsyncCommand”,因为确切的语义将取决于您的应用程序的需求。