我想在网格中结合了一系列文本框转换为对象本身是在我的视图模型(DataContext的)其他财产的性质 。
CurrentPerson
包括Name
和Age
属性
里面的视图模型:
public Person CurrentPerson { get; set ... (with OnPropertyChanged)}
XAML:
<TextBox Text="{Binding Name}" >
<TextBox Text="{Binding Age}" >
我不知道的方法来使用,我在网格范围内设置另一个DataContext的,没有任何结果,也试过没有任何结果再次设置源和路径像源= CurrentPerson,路径=年龄,这些人进行审判,看看是否会有任何变化与否。
我应该如何实现这一目标?
请问您Person
类成员Name
和Age
提高INPC自己?
如果您想更新任何价值Name
或Age
在ViewModel
,并让它在视图中反映,你需要他们提高物业内单独改变Person
类为好。
绑定是罚款,但认为是非常不通知从视图模型的变化。 还记得UpdateSourceTrigger
一个TextBox
默认为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是:
<StackPanel DataContext="{Binding CurrentPerson}">
<TextBox Text="{Binding Name}" />
<TextBox Margin="15"
Text="{Binding Age}" />
</StackPanel>
或者您也可以通过绑定作为@Kshitij建议
<StackPanel>
<TextBox Text="{Binding CurrentPerson.Name}" />
<TextBox Margin="15"
Text="{Binding CurrentPerson.Age}" />
</StackPanel>
并更新视图模型作为您的打字
<StackPanel DataContext="{Binding CurrentPerson}">
<TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" />
<TextBox Margin="15"
Text="{Binding Age, UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>
试试这个:
<TextBox Text="{Binding CurrentPerson.Name}" />
<TextBox Text="{Binding CurrentPerson.Age}" />
从本质上讲,你可以通过使用钻取特性.
分隔器。
对于未来的参考,如果你想深入到集合,您可以使用MyCollection[x]
就像你在代码中(其中x会被硬编码数, 不是一个变量来代替)。