C# · 12月 26, 2021

c#绑定对象的属性

我想将一个网格中的一系列文本框绑定到对象的属性,该对象本身是viewmodel(DataContext)中的另一个属性.

CurrentPerson由Name和Age属性组成

在viewmodel内:

public Person CurrentPerson { get; set … (with OnPropertyChanged)}

Xaml:

<Text@R_150_2419@ Text=”{Binding Name}” ><Text@R_150_2419@ Text=”{Binding Age}” >

我不确定使用的方法,我在Grid范围内设置另一个DataContext,没有任何结果,还尝试设置源代码和路径,如Source = CurrentPerson,Path = Age,这些是试用看的如果会有任何变化.

我应该如何实现这一点?

解决方法 你的人员类成员名称和年龄是否提高了INPC本身?

如果要在viewmodel中更新“名称”或“年龄”的值,并在视图中反映出来,您需要它们在Person类中单独提高更改属性.

绑定是很好的,但视图几乎没有被通知从视图模型的更改.还要记住,Text@R_150_2419@的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将是:

<StackPanel DataContext=”{Binding CurrentPerson}”> <Text@R_150_2419@ Text=”{Binding Name}” /> <Text@R_150_2419@ Margin=”15″ Text=”{Binding Age}” /></StackPanel>

或者您还可以按照@Kshitij的建议进行绑定

<StackPanel> <Text@R_150_2419@ Text=”{Binding CurrentPerson.Name}” /> <Text@R_150_2419@ Margin=”15″ Text=”{Binding CurrentPerson.Age}” /></StackPanel>

并更新视图模型作为您的打字

<StackPanel DataContext=”{Binding CurrentPerson}”> <Text@R_150_2419@ Text=”{Binding Name,UpdateSourceTrigger=PropertyChanged}” /> <Text@R_150_2419@ Margin=”15″ Text=”{Binding Age,UpdateSourceTrigger=PropertyChanged}” /></StackPanel>