2012-07-23 106 views
8

比方说,我在屏幕上的“当前记录”编辑区域..所以我的视图模型有一个类与所有当前编辑的属性,如:绑定到ViewModel.SubClass.Property(子属性)

class Record { 
    public string Notes { get { return "Foo"; } set { _notes = value; Notify("Notes"); } 
} 

,我们这个类添加到视图模型:在我看来

class AdjustsmentViewModel { 
    public Record CurrentRecord { get { return new Record(); }} 
} 

我如何可以绑定到CurrentRecord的Notes属性?我试过这个:

<TextBox Text="{Binding CurrentRecord.Notes, Mode=TwoWay}" VerticalScrollBarVisibility="Auto" TextWrapping="WrapWithOverflow" AcceptsReturn="True" /> 

但是这不起作用。我也试着设置周围的StackPanel的DataContext的:

<StackPanel DataContext="{Binding CurrentRecord}"> 

在那之后,我想在我的文本框{结合注}和{绑定路径=注},但这些都不似乎工作。

也许上面真的应该工作,我在别的地方搞点什么?

更新

这在用户控件发生。这个用户控件有一个独立的视图模型,从它的父窗口。

this.DataContext = UnityUtil.Resolve<AdjustmentsViewModel>(); 

而且我看到一个绑定错误:在“对象”“” MainViewModel”

是查看模式设置在主窗口中没有发现“注意”属性。

为了验证我有正确的视图模型的约束,我只是直接对视图模型中添加这个属性:

public string Notes2 { get { return "Bar"; } } 

和相应的文本块中的观点:

<TextBlock Text="{Binding Path=Notes2}" /> 

此按预期工作。

巨大成功

感谢瑞安,我能发现问题。这不是属性本身,而是CurrentRecord的设置方式。在我的setter中,我调用了INotifyPropertyChange处理程序,但它的属性的旧名称。因此,有观点没有得到CurrentRecord通知,所以我想说明的通知是不够的..

总之

,这个符号是正确的:{绑定路径= CurrentRecord.Notes}

+0

你得到的错误是什么? – Thelonias 2012-07-23 20:14:06

+0

没有错误。我只是没有看到文本框中的值(我的默认Foo字符串) – 2012-07-23 20:19:20

+0

什么是您的视图...窗口,用户控件,数据模板?你如何将视图的datacontext设置为视图模型对象? – Thelonias 2012-07-23 20:30:37

回答

8

以上应该工作,{绑定路径= CurrentRecord.Notes}是正确的。你可以检查你的datacontext设置为你的viewmodel吗?

还检查您的视图模型是否实现INotifyPropertyChanged。

编辑: 我刚刚创建了一个示例项目来重新创建它。不需要实现INotifyPropertyChanged,它只是在将datacontext设置为VM时才起作用。

+0

我还没有尝试过这种特殊的绑定之前,但它仍然似乎没有工作.. – 2012-07-23 20:18:18

+0

@SonicSoul究竟是什么工作......你的笔记里面的记录没有显示在您的文本框或何时你输入文本框,他们不会去你的记录的笔记...或两者?在输出窗口中是否有任何错误...就像一个绑定错误? – Thelonias 2012-07-23 20:19:44

+0

都不起作用。我默认我的字符串为Foo。没有出现。如果我在文本框中键入一些其他值,然后按一个按钮来查看调试器..该属性中仍然有“Foo”,所以它不受影响,或者显示..没有看到任何相关的错误输出 – 2012-07-23 20:24:05

1

确保您的CurrentRecord属性为1),并且2)通知UI层已发生更改。