gpt4 book ai didi

c# - Xamarin 表单选择器绑定(bind)

转载 作者:太空狗 更新时间:2023-10-30 00:01:16 25 4
gpt4 key购买 nike

我想实现一个简单的选择器 XAML 绑定(bind)到 3 个标签,当我从选择器中选择一个值时,标签将自动填充(数据来自 SQLite)。这是我所拥有的:

 <Picker x:Name="ListJobs" Title="Select Job"  ItemsSource="{Binding options}" ItemDisplayBinding="{Binding JobNo}" SelectedItem="{Binding SelectedJobs}"/>

<Label Text="{Binding JobsId}" IsVisible="True" x:Name="TxtId"/>
<Label Text="{Binding name}" IsVisible="True" x:Name="TxtName"/>
<Label Text="{Binding location}" IsVisible="True" x:Name="TxtLoc"/>

模型

public class Jobs
{
public string JobsId {get;set;}
public string name {get;set;}
public string location {get;set;}

public Jobs(){}
}

代码隐藏:

protected override OnAppearing()
{
jobsInfo = (List<Jobs>) GetJob();
foreach (var item in jobsInfo)
{
Jobs options = new Jobs
{
JobsId = item.JobsId,
name = item.name,
location = item.location
};
BindingContext = options;
}
}
private IEnumerable<Jobs> GetJobsInfo()
{
var db = _connection.Table<Jobs>();
return db.ToList();
}

我会从选择器(如下拉菜单)中选择并填充标签。

最佳答案

首先,您的代码中存在一些错误。

1.当你通过循环(从数据库获得的数据)时,选项总是用新数据更新(因此它使用最后一个对象生成),并将它设置为 BindingContext。您应该在此处设置 modelView 而不是模型。

2.Picker的itemSource必须是一个list,但是你在这里设置了一个model。

3.Viewmodel 必须实现 INotifyPropertyChanged 来通知更改。

我觉得你最需要了解的不是这个Picker,而是How to work with binding。

Bindable Properties

Data Binding Basics

From Data Bindings to MVVM

好吧,让我们回到这个案例。你需要的是here

我简化了demo,大家可以引用

  • XAML

    <Picker x:Name="picker" 
    Title="Select Job"
    ItemsSource="{Binding JobList}"
    ItemDisplayBinding="{Binding Name}"
    SelectedItem="{Binding SelectedJob}"/>

    <Label Text="{Binding SelectedJob.JobsId}" IsVisible="True" x:Name="TxtId" Margin="0,100,0,0"/>
    <Label Text="{Binding SelectedJob.Name}" IsVisible="True" x:Name="TxtName"/>
    <Label Text="{Binding SelectedJob.Location}" IsVisible="True" x:Name="TxtLoc"/>
  • 模型和 View 模型:

    public class Jobs
    {
    public string JobsId { get; set; }
    public string Name { get; set; }
    public string Location { get; set; }
    }

    public class RootModel : INotifyPropertyChanged
    {

    List<Jobs> jobList;
    public List<Jobs> JobList
    {
    get { return jobList; }
    set
    {
    if (jobList != value)
    {
    jobList = value;
    OnPropertyChanged();
    }
    }
    }

    Jobs selectedJob;
    public Jobs SelectedJob
    {
    get { return selectedJob; }
    set
    {
    if (selectedJob != value)
    {
    selectedJob = value;
    OnPropertyChanged();
    }
    }
    }


    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
    PropertyChangedEventHandler handler = PropertyChanged;
    if (handler != null)
    {
    handler(this, new PropertyChangedEventArgs(propertyName));
    }
    }
    }
  • 代码隐藏:

     public MainPage()
    {
    InitializeComponent();

    this.BindingContext = new RootModel
    {
    JobList = GetJobsInfo()
    };
    }

    private List<Jobs> GetJobsInfo()
    {
    var db = _connection.Table<Jobs>();
    return db.ToList();
    }
  • 我的测试:

    enter image description here

关于c# - Xamarin 表单选择器绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45849856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com