gpt4 book ai didi

c# - 绑定(bind)到对象的属性

转载 作者:可可西里 更新时间:2023-11-01 07:50:29 24 4
gpt4 key购买 nike

我想将网格中的一系列文本框绑定(bind)一个对象的属性中,它本身就是我的 ViewModel 中的另一个属性(数据上下文)。

CurrentPersonNameAge 属性组成

ViewModel 内部:

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

Xaml:

<TextBox Text="{Binding Name}" >
<TextBox Text="{Binding Age}" >

我不确定使用方法,我在网格范围内设置了另一个 DataContext,但没有任何结果,还尝试再次设置源和路径,如 Source=CurrentPerson,Path=Age,但没有任何结果,这些是为了试用,看看是否会有任何变化。

我该如何实现?

最佳答案

您的Person 类(class)成员NameAge 是否自己筹集了INPC?

如果您想更新 ViewModel 中的 NameAge 的值并将其反射(reflect)在 View 中,您需要它们也可以在 Person 类中提高单独更改的属性。

绑定(bind)没问题,但是 View 模型没有通知 View 更改。还请记住 TextBoxUpdateSourceTrigger 默认情况下是 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 的建议进行绑定(bind):

<StackPanel>
<TextBox Text="{Binding CurrentPerson.Name}" />
<TextBox Margin="15"
Text="{Binding CurrentPerson.Age}" />
</StackPanel>

并在您输入时更新 View 模型:

<StackPanel DataContext="{Binding CurrentPerson}">
<TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" />
<TextBox Margin="15"
Text="{Binding Age, UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>

关于c# - 绑定(bind)到对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15610887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com