xamlとWebブラウザーで実行されているGoogleマップとの共通バインドを提供するwpfコントロールを実装しています。現在、バインディングは一方通行であり、正常に動作しています。双方向バインディングでビューモデルに依存プロパティー値を書き戻す
双方向バインディングが指定されている場合、ビューモデルに値を書き戻す必要があります。私が始めているプロパティは、Googleマップのズームです。ブラウザで変更されたら、新しいズームレベルでC#コードを呼び出すページでjsを実行できます。
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