2016-12-10 4 views
0

私は地図コントロールを使用してUWPアプリケーションを開発中です。私はmvvm(フレームワークなし)を使ってこれをやっています。 私のビューモデルでは、実際に何メートル見ているのか(幅)を計算します。これは、ピクセルが何メーター表示されているかを計算し、コントロールの幅でこれを掛けます。問題がどこにあるのでしょうか。 WPFでは、OneWayToSourceモードがありました。これは、ソース値を設定し、ターゲット値を変更しません。しかし、これはUWPには欠けています。 バインディングを使用する場合は、ビューモデルに幅を設定する必要があります。そして、これは私が欲しくないものです。私はマップの幅を取得したいだけです。 それだけではありません。私は実際に幅を必要としません。なぜなら、これはNaNを与え、私が必要とするのはActualWidthです。しかし、これは裏付けのフィールドであり、xamlからこれにバインドすることはできません。UWPバインディングコントロールがビューモデルで幅を取得する

mvvmパターンを維持したまま、これに対する解決策がありますか?

答えて

1

ActualWidthとActualHeightは決してバインディングのソースまたはターゲットであってはなりません。 They simply don't work in that situation. SizeChangedイベントをリッスンして要素のサイズを取得する必要があります。これを行うには3つの方法があります。

  1. x:SizeChangedイベントをビューモデルのメソッドにバインドします。
  2. SizeChangedイベントをリッスンすることによって、その値を要素のサイズに同期させる添付プロパティを作成します。その後、TwoWayをこのプロパティにバインドできます。
  3. 2と基本的に同じ動作をします。
関連する問題