首页 > 解决方案 > Xamarin,标签页点击与按钮页点击有什么区别?

问题描述

当我点击标签页 () 时,会出现一个新的设置页面,但它没有填充我已经输入的信息,但我点击了一个按钮 (Navigation.PushModalAsync(new SettingsPage());) 页面出现并且它的填充了我输入的信息。两者有区别吗?

//for tab page
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms" 
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
        xmlns:local="clr-namespace:Bldg"
        x:Class="Bldg.HomePage" >

<local:HistoryLogPage Title="Log"/>
<local:AddDrainsPage Title="Add"/>
<local:SettingsPage Title="Edit Settings"/> 

<Label x:Name="drain1Label" />

</TabbedPage>

//for click button
void NextpageButton_Clicked(object sender, System.EventArgs e)
{ 
Navigation.PushModalAsync(new SettingsPage());
}

//SettingsPage

namespace Bldg
{
public partial class SettingsPage : ContentPage
{

public static string item, username;
public static string location1, location2;
bool is1Empty = string.IsNullOrEmpty(Settings.n1LocationSettings);
bool is2Empty = string.IsNullOrEmpty(Settings.n2LocationSettings);

List<string> list;

public SettingsPage()
{

InitializeComponent();
drainquantity();

list = new List<string>();
    list.Add("1");
    list.Add("2");

locationPicker1.SelectedIndexChanged += drain1Handle_SelectedIndexChanged;
locationPicker2.SelectedIndexChanged += drain2Handle_SelectedIndexChanged;

//nameofpickerinxamlfile.On<iOS().SetUpdateMode(UpdateMode.WhenFinished);


locationPicker1.On<iOS>().SetUpdateMode(UpdateMode.WhenFinished);
locationPicker2.On<iOS>().SetUpdateMode(UpdateMode.WhenFinished);

drainxPicker.SelectedItem = Settings.DrainquantitySettings;
locationPicker1.SelectedItem = Settings.n1LocationSettings;
locationPicker2.SelectedItem = Settings.n2LocationSettings;

nameEntry.Text = Settings.NameSettings;

clearButton.IsVisible = false;

drainlocationPicker2.IsEnabled = false;

drainxPicker.SelectedItem = Settings.DrainquantitySettings;
}

//this is fired when user changes or selects new selection
void drainxHandle_SelectedIndexChanged(object sender, System.EventArgs e)
{
//to get the value of user selected going to be use in switch; then save in a 
variable
var drainx = drainxPicker.Items[drainxPicker.SelectedIndex];

item = (string)drainxPicker.SelectedItem;


bool isdrainxEmpty = string.IsNullOrEmpty(Settings.DrainquantitySettings);

if (isdrainxEmpty == true)
{

//switch for user selected in drainpicker

switch (drainx)
{               
case "1":
n1Gridrow.IsVisible = true;
locationPicker1.IsVisible = true;
n2Gridrow.IsVisible = false;

if (is1Empty == true)
{
drainxPicker.IsEnabled = true;
}
else
drainxPicker.IsEnabled = false;

break;

case "2":
n1Gridrow.IsVisible = true;
n2Gridrow.IsVisible = true;
locationPicker2.IsEnabled = false;

break;

}  //switch end
}
else
{
drainxPicker.IsEnabled = false;
nameEntry.IsEnabled = false;
n1Gridrow.IsVisible = true;
n2Gridrow.IsVisible = true;

locationPicker1.IsEnabled = false;
locationPicker2.IsEnabled = false;

settingsaveButton.IsVisible = false;

}

}

void n1Handle_SelectedIndexChanged(object sender, System.EventArgs e)
{

location1 = (string)locationPicker1.SelectedItem;
if (is1Empty == true)
{
locationPicker2.IsEnabled = true;
n2Label.IsVisible = true;

locationPicker2.Items.Remove((string)locationPicker1.SelectedItem);
}

drainxPicker.IsEnabled = false;
locationPicker1.IsEnabled = false;

}

void n2Handle_SelectedIndexChanged(object sender, System.EventArgs e)
{
location2 = (string)locationPicker2.SelectedItem;

if (is2Empty == true)
{
locationPicker2.IsEnabled = true;
}
drainxPicker.IsEnabled = false;
locationPicker2.IsEnabled = false;

}

void nxy1()
{
foreach (var location in list)
{
locationPicker1.Items.Add(location);
}

}


void nxy2()
{

foreach (var location in list)        
{
locationPicker2.Items.Add(location);
} 
}

void settingsaveButton_Clicked(object sender, System.EventArgs e)
{
bool isNameEmpty = string.IsNullOrEmpty(nameEntry.Text);

if (isNameEmpty == true)
{
DisplayAlert("Enter Name", "PLEASE", "OK");
}

else
{

Navigation.PushModalAsync(new HomePage());



//saving to Settings
Settings.n1LocationSettings = location1;
Settings.n2LocationSettings = location2;
Settings.NameSettings = username;
Settings.DrainquantitySettings = item;

drainxPicker.IsEnabled = false;
}

}

void entryNameHandle_Unfocused(object sender, Xamarin.Forms.FocusEventArgs e)
{
username = nameEntry.Text;
}

void clearHandle_Clicked(object sender, System.EventArgs e)
{   
Settings.ClearAllData();
}
}
}

我希望当我单击选项卡式设置页面时,我会转到设置页面,其中输入的信息已填充。就像单击按钮一样,它会转到已经填充了用户输入的设置页面。

标签: xamarinxamarin.formsxamarin.androidxamarin.ios

解决方案


通常,选项卡式设置页面和推送设置页面是相同的。他们都是new fresh settings page

从您的代码中,我们可以看到您正在通过Settings插件设置 Picker 的值:

drainxPicker.SelectedItem = Settings.DrainquantitySettings;
locationPicker1.SelectedItem = Settings.n1LocationSettings;
locationPicker2.SelectedItem = Settings.n2LocationSettings;

因此,当您进入设置页面时,输入的信息是否会被填充取决于Settings.

例如:

如果Settings.DrainquantitySettings;有值,则将填充drainxPicker 的信息。

当您转到选项卡式设置页面和推送设置页面时检查Values您的设置以发现任何差异。Setting


推荐阅读