将绑定属性传递给ViewModel

时间:2011-05-27 14:32:28

标签: c# wpf mvvm mvvm-light

我仍然试图围绕使用WPF和MVVM的一些细节。有一件事让我感到困惑的是如何从View中获取ViewModel中的值。让我解释一下这个场景。

我有一个窗口,里面有几个UserControl。其中一个UserControl的DependencyProperty类型TimeSpan名为CurrentTime。它被绑定(在窗口的XAML中)到Window的ViewModel。

现在,我还有一个UserControl的ViewModel。它需要访问CurrentTime属性才能基于它创建对象。如何将这个值输入我的ViewModel?我看到了几个选项:

  1. 最简单的可能只是将View传递给ViewModel的构造函数(或以其他方式从ViewModel引用View)。但这似乎是错误的,而不是WPF / MVVMy。
  2. 我可以使用消息传递实际从其他ViewModel获取CurrentTime。这当然会奏效,但看起来有点过分。
  3. 我可以在UserControl的XAML中设置绑定,以在DP和ViewModel中的属性之间绑定OneWayToSource。我无法弄清楚如何设置它(如何在自己的XAML中引用UserControl的新属性?),但它似乎可以工作。
  4. 我错过了其他选择吗?以上哪一项(或我错过的)是最好的方法?

    我通过this thread here on SO阅读,因为它是相似的,但答案并没有真正回答我的问题 - 我很乐意用绑定或命令或其他东西来做,但我无法弄清楚如何准确。

1 个答案:

答案 0 :(得分:4)

第三个选项是前往此处的方式,但您必须在UserControl的代码隐藏中指定绑定:

public partial class MyUserControl : UserControl
{
    public MyUserControl() {
        InitializeComponent();

        SetBinding(MyPropertyProperty,
                   new Binding {Path = new PropertyPath("MyViewModelProperty"), Mode = BindingMode.OneWayToSource});
    }
}