2014-02-26 3 views
0

IValueConverter에서 Convert 함수를 사용하려하지만 다른 함수를 호출해야합니다. 반환 값을 사용 하겠지만 변환기에서 개체 값을 반환하라는 오류가 나타납니다. 어떻게하면이 문제를 피할 수 있습니까?함수를 변환 할 함수를 추가하십시오.

public void Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    RestClient client = new RestClient(); 
    client.BaseUrl = "http://"; 

    RestRequest request = new RestRequest(); 
    request.Method = Method.GET; 
    request.AddParameter("action", "REE"); 
    request.AddParameter("atm_longitude", location.Longitude); 

    client.ExecuteAsync(request, ParseFeedCallBack_ListDistance); 
} 
public void ParseFeedCallBack_ListDistance(IRestResponse response) 
{ 
    if (response.StatusCode == HttpStatusCode.OK) 
    { 
     ParseXMLFeedDistance(response.Content); 
    } 
} 
private string ParseXMLFeedDistance(string feed) 
{ 
.... return myvalueToBind; 

}

+0

인터페이스 "System.Windows.Data.IValueConverter"에서는 Convert 및 ConvertBack의 두 가지 메서드를 구현할 것을 기대합니다. 둘 다 개체를 반환해야합니다. void 메소드가 유효하지 않습니다. 적어도 null을 반환하고 변환 방법을 "public object Convert"로 변경해야합니다. 참고로, 정확히 무엇을 달성하려고합니까? 이 경우 변환기를 사용하는 것이 잘못된 접근 방법 인 것 같습니다. 일반 문제에 대한 컨텍스트를 제공하지 않았으므로 분명히 판단 할 수 없습니다. – FunksMaName

+0

사실 내가 목록 상자에서 lattitude와 longitude foreach 항목을 사용해야하고 webservice를 호출하여 장치와 해당 항목 간의 거리를 가져와야합니다. 그래서이 방법을 사용했는데 다른 제안이 있습니까? –

+0

이 경우 계산을 로컬로 수행하는 것이 좋습니다. 장치 좌표와 참조 좌표가 있습니다. 목록의 모든 항목에 대해 x 개의 HTTP 연결을 열지 않도록하여 장치 배터리 및 데이터 사용량을 저장합니다. 아래의 응답을 참조하십시오 – FunksMaName

답변

0

당신이 장치의 좌표를 가정하고,이 경우에는 두 좌표 사이의 거리를 계산하는 간단한 방법,

using System.Device.Location; 

public class GeoCalculator 
{ 
    public static double Distance(double deviceLongitude, double deviceLatitude, double atmLongitude, double atmLatitude) 
    { 
     //Coordinates of ATM (or origin). 
     var atmCoordinates = new GeoCoordinate(atmLatitude, atmLongitude); 

     //Coordinates of Device (or destination). 
     var deviceCordinates = new GeoCoordinate(deviceLatitude, deviceLongitude); 

     //Distance in meters. 
     return atmCoordinates.GetDistanceTo(deviceCordinates); 
    } 
} 

은 따라서 귀하의 컨버터가 같이 할 수 있습니다 :

public class DistanceConverter : IValueConverter 
{ 
    /// <summary> 
    /// This is your device coordinate. 
    /// </summary> 
    private static GeoCoordinate devCoordinate = new GeoCoordinate(61.1631, -149.9721); 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var location = value as LocationModel; 

     if (location != null) 
     { 
      return GeoCalculator.Distance(devCoordinate.Longitude, devCoordinate.Latitude, location.Longitude, location.Latitude); 
     } 

     return 0; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

개인적으로 이것을 위해 변환기를 사용하지 않습니다. 간단한 논리로이 계산을 수행하는 모델에 간단한 속성을 노출하기 만하면됩니다. 만약 당신이 순수 주의자가되어 모델의 논리를 좋아하지 않는다면,리스트를 반복하고 모델의 속성을 설정하는 것도 효과적입니다.

+0

이 잘 작동하지만 내가 atms 및 위치 장치의 loction을 전달하는 webservice를 사용하고 나서 내가 내 코드에서 이전에 설명한 것처럼 그것을 반환하는 결과가 –

+0

어떤 아이디어를 어떻게 피할 수 있습니다 변환 메서드에서 그것을 얻기 위해 구문 분석의 반환 함수를 주시겠습니까? –