如何绑定只读WPF控件属性(例如ActualWidth),以便在视图模型中访问其值?

我想将控件的只读属性绑定到我的视图模型,以便该值在视图模型中可用。

这样做的最佳方式是什么?

例如,我想将ActualWidth绑定到视图模型中的属性。 宽度值由WPF使用其布局逻辑生成,因此我无法在视图模型中生成此值并将其推送到控件属性,这通常是这种情况。 相反,我需要让WPF生成值并将其推送到视图模型。

我只使用Mode=OneWayToSource ,但这不适用于只读属性:

   ... child controls ...  

我现在这样做的方法是处理边框的SizeChanged ,然后代码将值插入到视图模型中,但这感觉不太对。

有人已经解决了这个问题吗?

更新:我的问题实际上是这个问题的重复:将只读GUI属性推回到ViewModel

这里描述了为什么这不起作用的实际问题。

但是,创建抛出setter以传递validation的给定解决方案在您的情况下不起作用。

我认为在ViewModel上调用一个方法是可以的。 如果这是错误的部分背后的代码,也许你可以使用交互性来调用基于事件触发器(SizeChanged)的方法。

你真的需要一个绑定吗?

  class MyVM { FrameworkElement _context; public MyVM(FrameworkElement context) { _context = context; } public double Width { get { return _context.ActualWidth; } } }