3

好的。它是 WPF,我正在尝试将我的窗口绑定到我的 ViewModel。虚拟机如下所示:

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对象属性的 my (例如IDDate),但是ComboBox需要显示所有 SalesTypes 列表的绑定表达式不起作用,显然是因为AllSalesTypes它是VM类的成员。

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

4

2 回答 2

2

我不知道您可以使用 Binding 来获取 DataContext 的父级。
就像你有一个类A,它有一个名为的属性MyProperty,你写:

 object o = MyAInstance.MyProperty;

您无法MyAInstanceo.

您的选择是使用:this.DataContext = _vm并访问如下属性:

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

或者添加一个Parent属性SalesRecord并手动将其设置为指向虚拟机,然后这样的事情就会起作用:

 <TextBox Text="{Binding ID}" />
 <ComboBox ItemsSource="{Binding Parent.AllSalesTypes}" />
于 2013-02-17T13:44:41.803 回答
0

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

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

如果您使用 MVVM,我也强烈建议您使用 MVVM 框架。你真的应该INotifyPropertyChanged在你的视图模型类型上实现——MVVM 框架提供了一个实现。

于 2013-02-17T13:44:28.097 回答