Может ли объект привязки данных объекта BindingContext напрямую изменяться при изменении поля ввода? - PullRequest
0 голосов
/ 31 октября 2019

Я новичок в xamarin, я надеюсь, что кто-то может помочь мне с этим:

У меня есть двойная страница с полями ввода и привязкой данных.

У меня есть страница A со списком просмотра. Когда я нажимаю на элемент, меня перенаправляют на страницу B, на которой есть элементы формы.

 async void LvData_ItemSelected(object sender, SelectedItemChangedEventArgs e)
        {
            if (e.SelectedItem != null)
            {
                var secondPage = new ProfileDataPage();
                secondPage.BindingContext = e.SelectedItem;
                await Navigation.PushAsync(secondPage);
            }
        }

Это работает, и на странице B поля заполнены правильными данными.

Так что теперь я изменяю значение поля ввода. Затем я нажимаю кнопку «Сохранить» и делаю что-то вроде этого (profileData = BindingContext объект):

 profileData.Height = Functions.ToNullableDouble(Height.Text);
profileData.Weight = Functions.ToNullableDouble(Weight.Text);
etc...

Разве BindingContext не знает, как изменилось значение записи, и я могу просто отправитьобъект BindingContext для моего веб-API для сохранения, обновления и так далее?

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Итак, я попробовал ваши решения, которые помогли, но только после того, как я обновил свой VS, все пакеты nuget и т. Д.

пришёл к этой идее этим постом: Ссылка

Я понятия не имею, почему это было необходимо, но это работает сейчас!

Спасибо!

0 голосов
/ 31 октября 2019

например, вот режим:

class MyData : INotifyPropertyChanged
{
    string height;
    string weight;
    public MyData(string height,string weight)
    {
        this.height= height;
        this.weight= weight;
    }

    public string Height
    {
        set
        {
            if (height!= value)
            {
                height= value;
                OnPropertyChanged("Height");

            }
        }
        get
        {
            return height;
        }
    }
   public string Weight
    {
        set
        {
            if (weight!= value)
            {
                weight= value;
                OnPropertyChanged("Weight");

            }
        }
        get
        {
            return weight;
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

Вы можете сослаться на Режим привязки

...