了解Xamarin中BindingContext的生命周期?

时间:2017-12-11 09:45:39

标签: c# mvvm data-binding xamarin.forms mvvm-light

当用户注册她的数据时,我有一个基本的注册页面,我将这个数据的对象保存在Settings静态类的静态字段中,所以我可以用其他注册页面填充公共字段,比如first_namelast_nameemail等。所以用户不必再次重新填充它们。

我的具体情况是,这些常见页面之一是基本注册页面本身(不包括某些字段)。 首先,了解常见字段的样子:

<Entry Text="{Binding RegistrationData.first_name, Mode=TwoWay}"  Grid.Row="1" Grid.Column="0" Placeholder="{Resx:TranslateExtension Text=lbFirstName}"/>
<Entry Text="{Binding RegistrationData.last_name, Mode=TwoWay}"  Grid.Row="2" Grid.Column="0" Placeholder="{Resx:TranslateExtension Text=lbLastName}"/>
<Entry Text="{Binding RegistrationData.email, Mode=TwoWay}" Keyboard="Email"  Grid.Row="3" Grid.Column="0" Placeholder="{Resx:TranslateExtension Text=lbEmail}"/>

显然该模型实现了INotifyPropertyChanged

在Register页面的构造函数中:

 public Register(int userType) //when I call this constructor the registration page represent some sub-registration pages
        {
            InitializeComponent();
            var oRegistrationViewModel = (RegistrationViewModel)BindingContext;
            if (Settings.UserData != null)
            {
                oRegistrationViewModel.RegistrationData = Settings.UserData;
                BindingContext = oRegistrationViewModel;
            }

但它不起作用,当我重置BindingContext数据未绑定到字段时。

我在视图模型中Settings.UserData的{​​{1}}方法中设置OnRegister,当从基本页面调用时(使用默认构造函数)

我正在使用RegisterCommand 我在XAML中设置了BindingContext:

GalaSoft.MvvmLight

BindingContext="{Binding Register, Source={StaticResource Locator}}" 是构造函数中Locator的键:

ViewModelLocator

和这个属性:

    SimpleIoc.Default.Register<RegistrationViewModel>();

我需要知道何时在XAML中使用绑定设置public RegistrationViewModel Register { get { return SimpleIoc.Default.GetInstance<RegistrationViewModel>(); } } ,这是在调用BindingContext时发生的,当我在重置InitializeComponent()数据后仍然没有显示时调用它。

0 个答案:

没有答案