如何工作IViewFor Bind扩展方法?

Евг*_*вин 2 data-binding wpf mvvm reactiveui

简单的问题,但我会看到解决方案.或者可能不明白Bind方法是如何工作的.目标是ViewModel和DataContext属性之间的双向绑定.

    public MainWindow()
    {
        InitializeComponent();

        this.Bind(this, v => v.DataContext, v => v.ViewModel);
    }

    public static readonly DependencyProperty ViewModelProperty = DependencyProperty.Register(
        "ViewModel", typeof (string), typeof (MainWindow));

    public string ViewModel
    {
        get { return (string) GetValue(ViewModelProperty); }
        set { SetValue(ViewModelProperty, value); }
    }
Run Code Online (Sandbox Code Playgroud)

当我设置ViewModel属性时,我得到InvalidCastException"System.String"到"WpfApplication1.MainWindow".

但是xaml绑定工作得很好.

<MainWindow 
   DataContext="{Binding RelativeSource={RelativeSource Self}, Path=ViewModel, Mode=TwoWay}" ...
Run Code Online (Sandbox Code Playgroud)

完整的xaml.cs/xaml代码在这里http://pastebin.com/iCKeNS7R

哪里错了?

更新: 此代码:

this.WhenAnyValue(v => v.ViewModel).BindTo(this, v => v.DataContext); this.WhenAnyValue(v => v.DataContext).BindTo(this, v => v.ViewModel);

也按预期工作

更新2 问题:this.Bind(viewModelParam,...)是否忽略viewModelParam参数?

例子^ http://pastebin.com/e2aPaGNc

我绑定到_otherViewModel,但是当在textBox中键入文本时,ViewModel.StrProp发生了变化,而不是_otherViewModel.

有谁知道,怎么样.绑定工作?

Ana*_*tts 72

Bind 在ViewModel和DataContext之间不起作用,因为类型不匹配(即我可以将DataContext设置为'4',现在它无法将其分配给ViewModel).

但是,如果您使用的是ReactiveUI绑定,则根本不需要 DataContext,您应该只在任何地方使用RxUI绑定.请忽略此主题上的其他答案,告诉您如何以错误的方式做事.

  • 对于上帝的爱,有人请修改这个并标记为答案! (2认同)