【问题标题】:How to use proper MVVM to pass data in different content page Xamarin如何使用正确的 MVVM 在不同的内容页面 Xamarin 中传递数据
【发布时间】:2020-05-04 10:41:27
【问题描述】:

我试图在我的 Xamarin 应用程序中的两个内容页面 - MainPage 和 Page1 之间传递值,但没有成功。这是我的 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>

所以我想在 MainPage.xaml 和 Page1.xaml 之间传递 Perimeter 值,但它每次都是空的。我认为这是因为我在 Page1.xaml 中创建了另一个 BindingContext 但我不知道如何修复。我唯一的方法发现是把Perimeter属性设为static

【问题讨论】:

  • 将虚拟机作为参数传递给第二页的构造器

标签: c# xaml xamarin.forms


【解决方案1】:

您可以像下面这样将 Page8 的视图模型绑定到 Page9。

主页:

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

【讨论】:

    猜你喜欢
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 2017-05-20
    相关资源
    最近更新 更多