Привязка к статическому свойству

Используя Swift , я определенно решил таким образом.
Моей целью было найти расстояние между двумя координатами:

import AFNetworking 

/**
 Calculate distance between two valid coordinates

 - parameter origin:      origin coordinates
 - parameter destination: destination coordinates
 - parameter completion:  completion callback
 */
func calculateDistance(origin origin: CLLocation, destination: CLLocation, completion: (distance: Double?) -> Void) {

    let service = "https://maps.googleapis.com/maps/api/directions/json"
    let originLat = origin.coordinate.latitude
    let originLong = origin.coordinate.longitude
    let destLat = destination.coordinate.latitude
    let destLong = destination.coordinate.longitude
    let urlString = "\(service)?origin=\(originLat),\(originLong)&destination=\(destLat),\(destLong)&mode=driving&units=metric&sensor=true&key=<YOUR_KEY>"
    let directionsURL = NSURL(string: urlString)

    let request = NSMutableURLRequest(URL: directionsURL!)

    request.HTTPMethod = "GET"
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json", forHTTPHeaderField: "Accept")
    let operation = AFHTTPRequestOperation(request: request)
    operation.responseSerializer = AFJSONResponseSerializer()

    operation.setCompletionBlockWithSuccess({ (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) -> Void in

        if let result = responseObject as? NSDictionary {
            if let routes = result["routes"] as? [NSDictionary] {
                if let lines = routes[0]["overview_polyline"] as? NSDictionary {
                    if let points = lines["points"] as? String {
                        let path = GMSPath(fromEncodedPath: points)
                        let distance = GMSGeometryLength(path)
                        print("wow \(distance / 1000) KM")

                    }
                }
            }
        }
        }) { (operation: AFHTTPRequestOperation!, error: NSError!)  -> Void in
            print("\(error)")
    }

    operation.start()

}
163
задан ASh 21 October 2019 в 14:45
поделиться

2 ответа

Если привязка должна быть двусторонней, необходимо указать путь. Существует трюк для двусторонней привязки статического свойства при условии, что класс не является статическим: объявить фиктивный экземпляр класса в ресурсах и использовать его как источник привязки.

<Window.Resources>
    <local:VersionManager x:Key="versionManager"/>
</Window.Resources>
...

<TextBox Text="{Binding Source={StaticResource versionManager}, Path=FilterString}"/>
161
ответ дан 23 November 2019 в 21:17
поделиться

Вы не можете привязать такая статика. Там' s нет способа для инфраструктуры привязки получать уведомления об обновлениях, так как не задействован DependencyObject (или экземпляр объекта, реализующий INotifyPropertyChanged ).

Если это значение не изменится, просто избавьтесь от привязки и используйте x: Static непосредственно внутри свойства Text . Определите ниже приложение app как пространство имен (и сборку) класса VersionManager.

<TextBox Text="{x:Static app:VersionManager.FilterString}" />

Если значение действительно изменится, я бы предложил создать одноэлемент, содержащий значение и привязанный к нему.

Пример синглтона:

public class VersionManager : DependencyObject {
    public static readonly DependencyProperty FilterStringProperty =
        DependencyProperty.Register( "FilterString", typeof( string ),
        typeof( VersionManager ), new UIPropertyMetadata( "no version!" ) );
    public string FilterString {
        get { return (string) GetValue( FilterStringProperty ); }
        set { SetValue( FilterStringProperty, value ); }
    }

    public static VersionManager Instance { get; private set; }

    static VersionManager() {
        Instance = new VersionManager();
    }
}
<TextBox Text="{Binding Source={x:Static local:VersionManager.Instance},
                        Path=FilterString}"/>
102
ответ дан 23 November 2019 в 21:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: