2014-02-26 143 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提供實現,兩者都需要您返回一個對象。無效方法無效。您必須至少返回null並將您的convert方法更改爲「public object Convert」。作爲一個側面說明,你到底想要達到什麼目標?在這種情況下使用轉換器似乎是錯誤的方法,我顯然無法判斷,因爲您沒有提供關於常見問題的上下文。 – FunksMaName

+0

事實是,我需要在我的列表框中使用經度和緯度的foreach項目,並使用它們來調用web服務以獲得設備和該項目之間的距離..因此,我使用了這種方法,您有任何其他建議嗎? –

+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

這工作正常,但我使用的web服務,其中我通過atms和位置設備的感情,然後我得到了一個結果返回它,就像我在我的代碼之前解釋 –

+0

任何想法如何我可以避免解析的返回函數來獲取它在轉換方法嗎? –