如何绑定只读的WPF控件属性(例如ActualWidth),以便在视图模型中可访问其值?
我想将控件的只读属性绑定到我的视图模型,以便视图模型中的值可用。如何绑定只读的WPF控件属性(例如ActualWidth),以便在视图模型中可访问其值?
这样做的最好方法是什么?
例如,我想将ActualWidth
绑定到我的视图模型中的属性。宽度值由WPF使用其布局逻辑生成,因此我无法在我的视图模型中生成此值并将其推送到控件属性,正如通常情况一样。相反,我需要让WPF生成值并将其推送到视图模型。
我只想用Mode=OneWayToSource
,但这并不能为只读属性的作用:
<Border
...
ActualWidth="{Binding MyDataModelWidth, Mode=OneWayToSource}"
>
... child controls ...
</Border>
我这样做是目前处理SizeChanged
用于边框的方法和代码隐藏的插头价值观视为模型,但这并不完全正确。
有没有人已经解决了这个问题?
UPDATE: 我的问题实际上是这其中的一个副本: Pushing read-only GUI properties back into ViewModel
你真的需要一个绑定?
class MyVM
{
FrameworkElement _context;
public MyVM(FrameworkElement context)
{
_context = context;
}
public double Width
{
get { return _context.ActualWidth; }
}
}
它是一个有趣的想法,但UI对象是从视图模型对象生成的,所以我无法通过构造函数传入FrameworkElement。我想我可以稍后将视图模型对象绑定到FrameworkElement,但是这听起来像违反了WPF原则(我可能会违反它,但至少在我当前的实现中视图模型没有显式访问UI)。 – 2010-12-14 11:07:06
的实际问题,为什么这是行不通的描述here。
但是,给定的解决方案来创建抛出setter来通过验证不会在你的情况下工作。
我认为可以在ViewModel上调用方法。如果这是错误的部分背后的代码,也许你可以使用交互性来调用基于事件触发器(SizeChanged)的方法。
真棒。几乎在同一时间,同一链接。哈哈! – Nawaz 2010-12-14 11:16:52
第二个链接是一个很好的可重用解决方案,其基础就是你正在做的事(使用SizeChanged事件)。 – sowee15 2010-12-14 11:18:51
请问您能否将答案写入答案,StackOverflow上的答案不应该只包含链接... – 2013-12-21 15:19:34