WPF - 根据另一个文本框值更改文本框值[重复]
Posted
技术标签:
【中文标题】WPF - 根据另一个文本框值更改文本框值[重复]【英文标题】:WPF - Change Textbox value according to another Textbox value [duplicate] 【发布时间】:2013-07-24 00:08:04 【问题描述】:好的。
我有一个具有以下属性的“Person”类:PersonId、Name 和 Age。 到目前为止,我已经添加了 3 个不同的人并从列表中设置了 DataContext。我的验证规则运行正常。
我想知道的是,当我在第一个 TextBox 中输入第二个人的名字时,我希望第二个 TextBox 显示这个人的年龄。
例如,假设我有这个 DataContext:
约翰,25 岁 保罗,30 岁 乔治,28 岁只要我输入“Paul”,第二个 TextBox 的值就会更改为“30”;如果我输入“John”,第二个 TextBox 应该更改为“25”,依此类推。
提前致谢, 蒂亚戈
【问题讨论】:
【参考方案1】:基本思想是通过 Person 属性连接 Name 和 Age。在 Name 的 setter 中,根据姓名搜索 person,如果结果不为 null,则将其分配给 Person。在 Person 的 setter 中,设置 Age 并通知 UI。代码如下:
private Person _selectedPerson;
public Person SelectedPerson
get return _selectedPerson;
set
if (value == null)
return;
_selectedPerson = value;
PersonAge = _selectedPerson.Age;
OnPropertyChanged("Person");
private string _personName;
public string PersonName
get return _personName;
set
_personName = value;
var person = Persons.FirstOrDefault(item => item.Name == _personName);
if (person != null)
SelectedPerson = person;
OnPropertyChanged("PersonName");
private int _personAge;
public int PersonAge
get return _personAge;
set
_personAge = value;
OnPropertyChanged("PersonAge");
在上面的代码中,Persons 是你绑定到 ListBox 的列表,PersonName 绑定到 name 的文本框,PersonAge 绑定到 age 的文本框。我在这里保持 PersonAge 可写,因为您使用的是文本框而不是文本块。
希望对你有帮助。
【讨论】:
问题是,我为这个小例子使用了 3 层架构,如下所示:类层、业务逻辑层和数据访问层。每当我尝试使用'var person = Persons.FirstOrDefault(item => item.Name == _personName);'我收到关于不将一层隐式转换为另一层的错误。 由于没有代码,我不确定您的 Persons 类型是什么以及您选择绑定到 UI 的类型。可能您在 DataModel 和 Dto 中都有 Person 对象,并将它们混合在一个层中。 这是我的 Person.cs:Pastebin - Person.cs 您不应该将 SelectedPerson 放在 Person 类中。您可能有一个类,其中包含绑定到 UI 的数据的人员列表。您最好将 SelectedPerson 属性放在该类中。 谢谢,我会努力做到的。我没有在这个项目中使用 MVVM,也许我现在应该考虑一下。以上是关于WPF - 根据另一个文本框值更改文本框值[重复]的主要内容,如果未能解决你的问题,请参考以下文章
javascript:在用户键入或更改文本框值时忽略无效输入[重复]