行。它是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
对象的属性(例如ID
和Date
),但ComboBox
需要显示所有SalesTypes的列表不起作用,显然是因为AllSalesTypes
是VM
类的成员。
我的问题是:有没有办法编写一个绑定表达式来查看当前DataContext
的父级而不是它自己?
答案 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框架提供了此实现。