WPF - 根据另一个文本框值更改文本框值

时间:2013-07-24 13:21:59

标签: wpf binding inotifypropertychanged

确定。

我有一个'Person'类,其中包含以下属性:PersonId,Name和Age。 到目前为止,我添加了3个不同的人并从List中设置DataContext。我的验证规则正常。

我想知道的是,当我在第一个TextBox中输入第二个人的名字时,我希望第二个TextBox显示这个人的年龄。

例如,假设我有这个DataContext:

  • 约翰,25岁
  • 保罗,30岁
  • 乔治,28岁

只要输入'Paul',第二个TextBox就应该将其值改为'30';如果我输入'John',则第二个TextBox应该更改为'25',依此类推。

提前致谢, 蒂亚戈

1 个答案:

答案 0 :(得分:1)

基本思想是通过Person属性连接Name和Age。在Name的setter中,您可以根据名称搜索人员,如果结果不为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绑定到agebox的文本框。我在这里保持PersonAge可写,因为你使用的是文本框而不是文本块。

希望它可以提供帮助。