xamarin 表单:如何确保选择器不为 null 或为空?
xamarin forms: how to make sure that a picker is not null or empty?
现在用户可以跳过选择器选择。如何确保用户在转到下一个选择器之前选择了一个选项?例如,如果第二个选择器是空的,那么它不能移动到第三个选择器。
我试过 if else 语句,但我不知道把它放在哪里,也许应该有更好的方法来做?
你可以有这样一个简单的逻辑。在每个选择器中,检测焦点事件,然后检查前一个是否有值/selectedindex 未更改,然后应用您的逻辑/弹出窗口等。
YourPicker2.Focused += (object sender, EventArgs e) =>
{
if(YourPicker1.SelectedIndex==-1)
{
DisplayAlert("Please fill the XXX picker");
}
};
这是您的 question.There 的样本 Xaml:
<Picker x:Name="PickerOne" Title="Select First" TitleColor="Red">
<Picker x:Name="PickerTwo" Title="Select Second" TitleColor="Green" IsEnabled = "False">
<Picker x:Name="PickerThree" Title="Select Three" TitleColor="Blue" IsEnabled = "False">
在ContentPage中,设置ItemSource
:
var monkeyList = new List<string>();
monkeyList.Add("Baboon");
monkeyList.Add("Capuchin Monkey");
monkeyList.Add("Blue Monkey");
monkeyList.Add("Squirrel Monkey");
monkeyList.Add("Golden Lion Tamarin");
monkeyList.Add("Howler Monkey");
monkeyList.Add("Japanese Macaque");
PickerOne.ItemsSource = monkeyList;
PickerTwo.ItemsSource = monkeyList;
PickerThree.ItemsSource = monkeyList;
并添加 SelectedIndexChanged
方法:
PickerOne.SelectedIndexChanged += PickerOne_SelectedIndexChanged;
PickerTwo.SelectedIndexChanged += PickerTwo_SelectedIndexChanged;
void PickerOne_SelectedIndexChanged(object sender, EventArgs e)
{
var picker = (Picker)sender;
int selectedIndex = picker.SelectedIndex;
if (selectedIndex != -1)
{
PickerTwo.IsEnabled = true;
}else{
PickerTwo.IsEnabled = false;
}
}
void PickerTwo_SelectedIndexChanged(object sender, EventArgs e)
{
var picker = (Picker)sender;
int selectedIndex = picker.SelectedIndex;
if (selectedIndex != -1)
{
PickerThree.IsEnabled = true;
}else{
PickerThree.IsEnabled = false;
}
}
您应该使用 MVVM 模式和模型绑定。因此,您可以针对模型而不是每个 UI 控件检查验证。
可以在此处找到一个简单的指南:https://www.codeproject.com/Articles/1274851/Xamarin-Forms-Validations-Made-Simple
现在用户可以跳过选择器选择。如何确保用户在转到下一个选择器之前选择了一个选项?例如,如果第二个选择器是空的,那么它不能移动到第三个选择器。
我试过 if else 语句,但我不知道把它放在哪里,也许应该有更好的方法来做?
你可以有这样一个简单的逻辑。在每个选择器中,检测焦点事件,然后检查前一个是否有值/selectedindex 未更改,然后应用您的逻辑/弹出窗口等。
YourPicker2.Focused += (object sender, EventArgs e) =>
{
if(YourPicker1.SelectedIndex==-1)
{
DisplayAlert("Please fill the XXX picker");
}
};
这是您的 question.There 的样本 Xaml:
<Picker x:Name="PickerOne" Title="Select First" TitleColor="Red">
<Picker x:Name="PickerTwo" Title="Select Second" TitleColor="Green" IsEnabled = "False">
<Picker x:Name="PickerThree" Title="Select Three" TitleColor="Blue" IsEnabled = "False">
在ContentPage中,设置ItemSource
:
var monkeyList = new List<string>();
monkeyList.Add("Baboon");
monkeyList.Add("Capuchin Monkey");
monkeyList.Add("Blue Monkey");
monkeyList.Add("Squirrel Monkey");
monkeyList.Add("Golden Lion Tamarin");
monkeyList.Add("Howler Monkey");
monkeyList.Add("Japanese Macaque");
PickerOne.ItemsSource = monkeyList;
PickerTwo.ItemsSource = monkeyList;
PickerThree.ItemsSource = monkeyList;
并添加 SelectedIndexChanged
方法:
PickerOne.SelectedIndexChanged += PickerOne_SelectedIndexChanged;
PickerTwo.SelectedIndexChanged += PickerTwo_SelectedIndexChanged;
void PickerOne_SelectedIndexChanged(object sender, EventArgs e)
{
var picker = (Picker)sender;
int selectedIndex = picker.SelectedIndex;
if (selectedIndex != -1)
{
PickerTwo.IsEnabled = true;
}else{
PickerTwo.IsEnabled = false;
}
}
void PickerTwo_SelectedIndexChanged(object sender, EventArgs e)
{
var picker = (Picker)sender;
int selectedIndex = picker.SelectedIndex;
if (selectedIndex != -1)
{
PickerThree.IsEnabled = true;
}else{
PickerThree.IsEnabled = false;
}
}
您应该使用 MVVM 模式和模型绑定。因此,您可以针对模型而不是每个 UI 控件检查验证。 可以在此处找到一个简单的指南:https://www.codeproject.com/Articles/1274851/Xamarin-Forms-Validations-Made-Simple