我想将一个网格中的一系列文本框绑定到对象的属性,该对象本身是viewmodel(DataContext)中的另一个属性.
CurrentPerson由Name和Age属性组成
在viewmodel内:
- public Person CurrentPerson { get; set ... (with OnPropertyChanged)}
Xaml:
我不确定使用的方法,我在Grid范围内设置另一个DataContext,没有任何结果,还尝试设置源代码和路径,如Source = CurrentPerson,Path = Age,这些是试用看的如果会有任何变化.
我应该如何实现这一点?
解决方法
你的人员类成员名称和年龄是否提高了INPC本身?
如果要在viewmodel中更新“名称”或“年龄”的值,并在视图中反映出来,您需要它们在Person类中单独提高更改属性.
绑定是很好的,但视图几乎没有被通知从视图模型的更改.还要记住,TextBox的UpdateSourceTrigger默认为LostFocus,设置为PropertyChanged将更新您的字符串在viewmodel作为您的打字.
简单的例子:
- public class Person : INotifyPropertyChanged {
- private string _name;
- public string Name {
- get {
- return _name;
- }
- set {
- if (value == _name)
- return;
- _name = value;
- OnPropertyChanged(() => Name);
- }
- }
- // Similarly for Age ...
- }
现在你的xaml将是:
或者您还可以按照@Kshitij的建议进行绑定
并更新视图模型作为您的打字