c# - 如何访问多个 Xamarin“选择器”中的选定参数
问题描述
我在 Lucas Zhang 的帮助下创建了一个自定义选择器,您可以查看链接 xamarin custom multiple picker
现在我对这个问题还有另一个问题。当用户选择一个或多个组时,我需要访问这些选定的参数。
public class Grup
{
public int ID { get; set; }
public string GroupName { get; set; }
public Nullable<int> SubsID { get; set; }
}
这是我使用的模型。Picker 通过 ViewModel 读取 Groupnames,如下所示。
public class NewUserViewModel
{
public List<Grup> GroupList { get; set; }
public List<Grup> SelectedGroup { get; set; }
}
我想将来自视图中每个选择器的这些参数保存到这里,此外我将通过 API 将它们发送到数据库。问题是当用户选择它们并单击保存按钮时如何访问这些 ID。
解决方案
一个简单的方法是监听选择器的选择事件,然后通过迭代获得每个选择的结果pickerStack
像这样(基于 Lucas Zhang 的样本):
在PickerView中:
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class PickerView : ContentView
{
public Group SelectGroup; // add the SelectGroup property which save the result after you select
public ObservableCollection<Group> pickerSource { get; set; }
public PickerView(ObservableCollection<Group> source) //here i change the source to your Group model
{
InitializeComponent();
picker.ItemsSource = source;
}
private void TapGestureRecognizer_Tapped(object sender, EventArgs e)
{
var stack = this.Parent as StackLayout;
stack.Children.Remove(this);
}
private void picker_SelectedIndexChanged(object sender, EventArgs e)
{
var picker = sender as Picker;
SelectGroup = (Group)picker.SelectedItem;
}
}
在PickerView.xaml中添加SelectedIndexChanged
事件:
<Picker Grid.Column="0" x:Name="picker" Title="{Binding GroupName}" ItemDisplayBinding="{Binding ID}" TitleColor="Red" SelectedIndexChanged="picker_SelectedIndexChanged" />
在您的页面中:
public partial class MutiPicker : ContentPage
{
public MutiPicker()
{
InitializeComponent();
}
private void Button_Clicked(object sender, EventArgs e)
{
var source = new ObservableCollection<Group>() { new Group() { ID=111,GroupName="AAA",SubsID=1}, new Group() { ID = 222, GroupName = "BBB", SubsID = 2 }, new Group() { ID = 333, GroupName = "CCC", SubsID = 3 } };
pickerStack.Children.Add(new PickerView(source));
}
//iterate over your pickerviews
private void Update_Clicker(object sender, EventArgs e)
{
foreach (var pickerview in pickerStack.Children)
{
if (pickerview is PickerView && ((PickerView)pickerview).SelectGroup != null)
{
var selectgroup = ((PickerView)pickerview).SelectGroup;//here you will get your select group,then you could get its ID ,GroupName or SubsID
}
}
}
}
推荐阅读
- macos - 如何在终端中使用代理?
- c# - HttpClient Polly WaitAndRetry 策略
- python - 为什么我的输入函数打印的是 else 语句而不是我定义的字符串?
- apache-spark - Spark FileAlreadyExistsException 在写入 JSON 文件时出现阶段失败
- angular - 令牌未以角度 WWW-Authenticate: Bearer 发送到服务器并得到 401 错误
- javascript - 使用 webkitRelativePath 时,路径分隔符是操作系统特定的吗?
- oauth-2.0 - 在 SPA 应用程序中保护没有 OAuth2 客户端凭据流的 Api 调用
- jquery - 在 jquery 中更改字体系列
- gnuplot - Gnuplot中的动态彩色条形图?
- r - R在对象上重复功能