我正在實現一個wpf控件,該控件提供了在web瀏覽器中運行的xaml和Google Maps之間的一些常見綁定。目前,綁定是單向的,工作正常。在雙向綁定中將視圖模型的依賴項屬性值寫回
接下來我需要做的是在指定雙向綁定時將值寫回視圖模型。我開始使用的是Google Map的縮放。當它在瀏覽器中更改時,我可以在頁面上運行js,以新的縮放級別調用我的C#代碼。
向DP提供這個新值的正確方法是什麼?如果選擇了雙向綁定,它將更新視圖模型的縮放級別?
我當前的縮放級別DP代碼:
#region ZoomProperty
//Called from the web page
private JSValue MapZoom_OnMapZoomChanged(JSValue[] arguments) {
string zoom = arguments[0];
//where do I set the zoom so that the view model bound property is updated?
return null;
}
public static readonly DependencyProperty ZoomProperty =
DependencyProperty.Register("Zoom", typeof(string), typeof(GoogleMap), new FrameworkPropertyMetadata(string.Empty, OnZoomPropertyChanged), OnZoomPropertyValidate);
public string Zoom {
get { return (string)GetValue(ZoomProperty); }
set { SetValue(ZoomProperty, value); }
}
private static bool OnZoomPropertyValidate(object value) {
return value is string;
}
private static void OnZoomPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e) {
GoogleMap control = source as GoogleMap;
control.SetZoom(e.NewValue.ToString());
}
private string zoom;
public void SetZoom(string value) {
if (!googleMapPageReady) {
zoom = value;
return;
}
webControl.ExecuteJavascript(string.Format("setZoom({0})", zoom));
}
#endregion
作爲一個註釋,你也可以設置'FrameworkPropertyMetadataOptions.BindsTwoWayByDefault'標誌和Register方法的另一個重載,以使默認情況下雙向綁定依賴屬性。 – Clemens