我想在网格中绑定 系列文本框到对象的属性,这本身就是我的ViewModel中的另一个属性( DataContext的)。
CurrentPerson
由Name
和Age
属性
在ViewModel中:
public Person CurrentPerson { get; set ... (with OnPropertyChanged)}
Xaml:
<TextBox Text="{Binding Name}" >
<TextBox Text="{Binding Age}" >
我不确定使用的方法,我在网格范围内设置了另一个DataContext,没有任何结果,还尝试设置源和路径,如Source = CurrentPerson,Path = Age再没有任何结果,这些是为审判,看看是否会有任何改变。
我该如何实现这个目标?
答案 0 :(得分:21)
您的Person
班级成员Name
和Age
是否自己提升了INPC?
如果您要更新Name
中Age
或ViewModel
的值并让它反映在视图中,则需要它们在{{1}内单独更改属性同样也是。
绑定很好但是视图几乎没有通知视图模型的更改。另请注意Person
UpdateSourceTrigger
默认为TextBox
,将其设置为LostFocus
会在PropertyChanged
中更新您的字符串作为您的输入。
简单示例:
ViewModel
现在你的xaml将是:
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 ...
}
或者您也可以按照@Kshitij
的建议进行绑定<StackPanel DataContext="{Binding CurrentPerson}">
<TextBox Text="{Binding Name}" />
<TextBox Margin="15"
Text="{Binding Age}" />
</StackPanel>
并在输入时更新视图模型
<StackPanel>
<TextBox Text="{Binding CurrentPerson.Name}" />
<TextBox Margin="15"
Text="{Binding CurrentPerson.Age}" />
</StackPanel>
答案 1 :(得分:14)
试试这个:
<TextBox Text="{Binding CurrentPerson.Name}" />
<TextBox Text="{Binding CurrentPerson.Age}" />
基本上,您可以使用.
分隔符深入查看属性。
为了将来参考,如果您想要深入研究集合,您可以像在代码中一样使用MyCollection[x]
(其中x将被硬编码的数字替换,不是变量< / em>的)。