WPF绑定:绑定到DataContext的父级

时间:2013-02-17 13:07:03

标签: wpf mvvm binding viewmodel

行。它是WPF,我正在尝试将我的窗口绑定到我的ViewModel。 VM看起来像这样:

public class VM
{
    public SalesRecord SR {get; set;} 
    public List<string> AllSalesTypes {get; set;}
}

public class SalesRecord
{
    public int ID {get; set;} 
    public DateTime Date {get; set;}
}

这是我的XAML:

...
<TextBox Text="{Binding Path=ID, Mode=TwoWay}"  />
<TextBox Text="{Binding Path=Date, Mode=TwoWay}"  />
<ComboBox ItemsSource="{Binding AllSalesTypes}" Text="{Binding Path=SalesType, Mode=TwoWay}" />
...

我在运行时将数据上下文设置为VM对象,如下所示:

this.DataContext = _vm.SR;

现在绑定表达式适用于所有TextBoxes SR对象的属性(例如IDDate),但ComboBox需要显示所有SalesTypes的列表不起作用,显然是因为AllSalesTypesVM类的成员。

我的问题是:有没有办法编写一个绑定表达式来查看当前DataContext的父级而不是它自己?

2 个答案:

答案 0 :(得分:2)

我不知道你有什么方法可以使用Binding来获取DataContext的Parent 就像你有一个类A,它有一个名为MyProperty的属性你写的:

 object o = MyAInstance.MyProperty;

您无法从MyAInstance的实例中找到o

您的选项使用:this.DataContext = _vm并访问以下属性:

 <TextBox Text="{Binding SR.ID}" />

或者将Parent属性添加到SalesRecord并手动将其设置为指向VM,然后这样的内容将起作用:

 <TextBox Text="{Binding ID}" />
 <ComboBox ItemsSource="{Binding Parent.AllSalesTypes}" />

答案 1 :(得分:0)

最好为视图模型(因此名称)制作模型(数据上下文)并将文本框绑定更改为:

<TextBox Text="{Binding SR.ID}" />
<TextBox Text="{Binding SR.Date}" />

如果您使用MVVM,我还强烈建议使用MVVM框架。您应该在视图模型类型上实现INotifyPropertyChanged - MVVM框架提供了此实现。