25

ビュー モデルで値を使用できるように、コントロールの読み取り専用プロパティをビュー モデルにバインドしたいと考えています。

これを行う最善の方法は何ですか?

ActualWidthたとえば、ビュー モデルのプロパティにバインドしたいと思います。幅の値は、レイアウト ロジックを使用して WPF によって生成されるため、通常のようにビュー モデルでこの値を生成してコントロール プロパティにプッシュすることはできません。代わりに、WPF で値を生成してビュー モデルにプッシュする必要があります。

を使用するだけですMode=OneWayToSourceが、これは読み取り専用プロパティでは機能しません。

  <Border
      ...
      ActualWidth="{Binding MyDataModelWidth, Mode=OneWayToSource}"
      >
      ... child controls ...
  </Border>

私が現在行っている方法はSizeChanged、境界線を処理することであり、コード ビハインドは値をビュー モデルにプラグインしますが、これはまったく正しくありません。

誰かがすでにこの問題を解決しましたか?

更新: 私の質問は事実上、この質問の複製です: Pushing read-only GUI properties back into ViewModel

4

2 に答える 2

1

これが機能しない理由に関する実際の問題は、ここで説明されています。

ただし、検証に合格するためにスローセッターを作成するための特定のソリューションは、あなたの場合には機能しません。

ViewModel でメソッドを呼び出しても問題ないと思います。それがコード ビハインド部分である場合は、対話機能を使用して、イベント トリガー (SizeChanged) に基づいてメソッドを呼び出すことができます。

于 2010-12-14T11:14:18.497 に答える
0

そのためのバインディングが本当に必要ですか?

    class MyVM
    {
        FrameworkElement _context;

        public MyVM(FrameworkElement context)
        {
            _context = context;
        }

        public double Width
        {
            get { return _context.ActualWidth; }
        }
    }
于 2010-12-14T11:03:04.917 に答える