Здесь куча проблем.
Первая и, вероятно, самая важная из них - это то, что вы реализовали Person.name
как поле.Привязка не работает с полями.Person.name
должно быть свойством.
Следующая проблема, с которой вы столкнулись, заключается в том, что если вы хотите, чтобы элемент управления обновлялся со значением свойства при изменении этого свойства, ваш класс должен реализовать изменение свойствауведомление.(Это еще одна причина, по которой Person.name
должно быть свойством.)
Третья проблема заключается в том, что вы используете методы WinForms в приложении WPF.Привязка данных исключает большинство случаев использования для события TextChanged
.(Не все: это может быть полезно при разработке пользовательских элементов управления.)
Четвертая проблема заключается в том, что нет необходимости в преобразовании значений, поэтому нет необходимости реализовывать преобразователь значений.
APerson
класс, который правильно реализует уведомление об изменении свойства, должен выглядеть примерно так:
public class Person : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler h = PropertyChanged;
if (h != null)
{
h(this, new PropertyChangedEventArgs(propertyName));
}
}
public Person() { }
public Person(string name)
{
Name = name;
}
private string _Name = "I was created by the parameterless constructor";
public string Name
{
get { return _Name; }
set
{
if (_Name == value)
{
return;
}
_Name = value;
OnPropertyChanged("Name");
}
}
}
После того, как вы это сделаете, если вы создадите объект Person
и свяжете любые TextBox
объекты 'Text
свойств к его Name
свойству, все они будут поддерживаться в синхронизации, например:
<StackPanel>
<StackPanel.DataContext>
<local:Person Name="John Smith"/>
</StackPanel.DataContext>
<TextBox Text="{Binding Name, Mode=TwoWay}"/>
<TextBox Text="{Binding Name, Mode=TwoWay}"/>
</StackPanel>
Связывание данных WPF гораздо больше, чем это, но это должно помочь вам в этомправильный путь.