【发布时间】:2015-01-30 10:45:04
【问题描述】:
简单的问题,但我没有看到解决方案。或者可能不明白 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); }
}
当我设置 ViewModel 属性时,我得到 InvalidCastException "System.String" to "WpfApplication1.MainWindow"。
但是 xaml 绑定可以完美运行。
<MainWindow
DataContext="{Binding RelativeSource={RelativeSource Self}, Path=ViewModel, Mode=TwoWay}" ...
完整的 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。
有人知道 this.Bind 是如何工作的吗??
【问题讨论】:
-
这只是一个例子,还是为什么要将数据上下文从主窗口绑定到字符串?
-
是的,这只是一个例子,我当然有“普通”视图模型类
-
Will:到底出了什么问题?请参见此处 (github.com/reactiveui/ReactiveUI.Samples/blob/master/…) 代码和我的代码之间只有一个差异是绑定/通过链接使用代码:this.WhenAnyValue(x => x.ViewModel).BindTo(this, x => x.DataContext);我尝试使用 this.Bind(this, v => v.DataContext, v => v.ViewModel);为什么他们的代码有效,而我的无效??
标签: wpf mvvm data-binding reactiveui