25

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

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

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

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

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

我目前这样做的方式是处理SizeChanged边框,并且代码隐藏将值插入视图模型,但这感觉不太正确。

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

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

4

2 回答 2

1

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

但是,创建一个 throwing setter 以通过验证的给定解决方案不适用于您的情况。

我认为在 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 回答