Вы используете
неправильно. Имя prop должно быть строкой с тем же значением, что и ключ, который имеет ваш объект ошибки. Примерно так:
// --> {touched.username && error.username ? {error. username} : null}
Если мы следуем документации:
name
name: string
[ 1115] ОбязательноИмя поля в состоянии Formik. Чтобы получить доступ к вложенным объектам или массивам, name> может также принять траекторию, подобную lodash-подобному, например
blockquote>social.facebook
или>friends[0].firstName
. Посмотрите на пример в DOC:
[ 1113] https://jaredpalmer.com/formik/docs/api/errormessage
Необходимо присвоить источник данных текстового поля, чтобы быть новым источником данных. Но дополнительно, необходимо присвоить источник данных источника данных, чтобы быть экземпляром класса.
MyDataSource.DataSource = new MyClass();
TextBox1.DataSource = MyDataSource;
Это должно работать на Вашу первичную обработку. Как другие упомянули, Вы, возможно, должны реализовать дополнительные интерфейсы на своем классе (INotifyPropertyChanged и т.д.), если Вы собираетесь быть изменением свойств класса через какие-либо фоновые процессы.
Если Вы только обновляете свойства через форму, то Вам не нужен этот шаг.
Похож на Вас, вероятно, нуждаются в Связываемом атрибуте на Вашем свойстве MyName (и следуют за предложением Frederik также):
[System.ComponentModel.Bindable(true)]
public string MyName
{
get { return _myName; }
set
{
if( _myName != value )
{
_myName = value;
OnPropertyChanged("MyName");
}
}
}
У меня нет кода передо мной, но я думаю, что источник данных отчасти похож на набор. Необходимо добавить экземпляр MyClass к источнику данных, и это - то, с чем свяжут поля формы. Существуют также методы для навигации через источник данных к нескольким экземплярам MyClass, но это не кажется на необходимость в этом. Проверьте документы на DataSource.
Я не думаю, что необходимо реализовать любые необычные интерфейсы. Я, кажется, помню, что существует метод на источнике данных, который позволяет Вам обновить или снова переплести текущий объект после изменения некоторых значений.
Необходимо реализовать интерфейс INotifyPropertyChanged к типу MyClass:
public class MyClass : INotifyPropertyChanged
{
private string _myName;
public string MyName
{
get { return _myName; }
set
{
if( _myName != value )
{
_myName = value;
OnPropertyChanged("MyName");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if( PropertyChanged != null )
PropertyChanged( this , new PropertyChangedEventArgs(propertyName) );
}
}
Этот интерфейс требуется для инфраструктуры DataBinding, если Вы хотите поддерживать простую привязку данных. Интерфейс INotifyPropertyChanged используется, чтобы уведомить 'привязку', что свойство изменилось, таким образом, инфраструктура DataBinding может действовать соответственно к нему.
Затем можно связать с данными свойство MyName к текстовому Свойству текстового поля.
Я получаю сообщение об ошибке в
DataBinding.Add("TEXT", myObject, myObjectProperty)
method
Вероятно, это связано с тем, что вы пропустили явный {get;set;} в объявлении свойства!
ПЛОХО:
public string FirstName; //<-- you will not be able to bind to this property!
ХОРОШО:
public string FirstName { get; set; }