Как использовать правильный MVVM для передачи данных на другой контент страницы Xamarin - PullRequest
0 голосов
/ 01 мая 2020

Я пытался передать значения между двумя страницами содержимого - MainPage и Page1 в моем приложении Xamarin, но безуспешно. Вот мой MainPage.xaml

   <ContentPage.BindingContext>
        <local:FindPerimeter/>
    </ContentPage.BindingContext>

    <StackLayout>
        <Label Text="A side here"/>
        <Entry Placeholder="A side" Text="{Binding Aside}"/>
        <Button Text="Next page" Clicked="Button_Clicked"/>
    </StackLayout>

Код кнопки позади

private async void Button_Clicked(object sender, EventArgs e) => await Navigation.PushModalAsync(new Page1());

FindPerimeter.cs

    public class FindPerimeter : ViewModelBase
    {
        string a_side;

        public string Aside
        {
            get => a_side;
            set
            {
                if (a_side == value) return;

                a_side = value;

                OnPropertyChanged();
                Perimeter = Calculate(a_side).ToString();
            }
        }

        string perimeter;

        public string Perimeter
        {
            get => perimeter;
            set
            {
                if (perimeter == value) return;

                perimeter = value;

                OnPropertyChanged();
            }
        }

        double Calculate(string a)
        {
            return 2 * double.Parse(a);
        }

    }
V

iewModelBae.cs

public class ViewModelBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

и код Page1.xaml

   <ContentPage.BindingContext>
        <local:FindPerimeter/>
    </ContentPage.BindingContext>
    <ContentPage.Content>
        <StackLayout>
            <Label Text="Perimeter is :"/>
            <Label Text="{Binding Perimeter}"/>
        </StackLayout>
    </ContentPage.Content>

Поэтому я хочу передать значение Perimeter между MainPage.xaml и Page1.xaml, но он каждый раз пуст. Я думаю, это потому, что я создаю пыльник BindingContext в Page1.xaml, но я не знаю, как это исправить. Единственный способ, который я нашел, - сделать свойство Perimeter static.

1 Ответ

0 голосов
/ 04 мая 2020

Вы можете привязать модель просмотра страницы 8 к странице 9, как показано ниже.

MainPage:

  private async void Button_Clicked(object sender, EventArgs e)
    {
        var page1 = new Page1();
        page1.BindingContext = this.BindingContext;
        await Navigation.PushModalAsync(page1);
    }

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...