如何使用 xamarain 表单实时显示 firebase 的选取器项目并在选择项目时添加到 firebase

发布于 2025-01-19 15:12:23 字数 607 浏览 5 评论 0原文

我想显示 firebase 中的选择器项目,如何做到这一点?

<Picker x:Name="AppointmentPatientName" Title="Patient Name" >
            <Picker.Items>
                <x:String>Ahmad</x:String>
                <x:String>Ali</x:String>
                <x:String>Omar</x:String>
                <x:String>Alma</x:String>
                <x:String>Aya</x:String>
                <x:String>Ammar</x:String>
                <x:String>Noor</x:String>
            </Picker.Items>
        </Picker>
      

I want to display a picker items from firebase how can do this ?

<Picker x:Name="AppointmentPatientName" Title="Patient Name" >
            <Picker.Items>
                <x:String>Ahmad</x:String>
                <x:String>Ali</x:String>
                <x:String>Omar</x:String>
                <x:String>Alma</x:String>
                <x:String>Aya</x:String>
                <x:String>Ammar</x:String>
                <x:String>Noor</x:String>
            </Picker.Items>
        </Picker>
      

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

韬韬不绝 2025-01-26 15:12:23
  1. 当您想使用xamarin表单实时显示firebase的Picker项时,请先从firebase获取项,然后将项绑定到picker。

    型号:

    公共类 Person
    {
     公共 int PersonId { 获取;放; }
     公共字符串名称{获取;放; }
    }
    

    获取、添加、删除 Firebase 实时数据库的项目:

    公共类FirebaseHelper
     {
     FirebaseClient firebase = new FirebaseClient("https://fir-xxxxx-default-rtdb.firebaseio.com/");// 您可以从自己的 Firebase 数据库获取的链接。 https://console.firebase.google.com/
    
     公共异步任务<列表<人员>>获取所有人员()
     {
    
         返回(等待 firebase
           .Child(“人”)
           .OnceAsync()).Select(item => 新 Person
           {
               名称 = 项目.对象.名称,
               PersonId = 项目.Object.PersonId
           }).ToList();
     }
    
     公共异步任务AddPerson(int personId,字符串名称)
     {
    
         等待火力基地
           .Child(“人”)
           .PostAsync(new Person() { PersonId = personId, Name = 姓名 });
     }
    
     公共异步任务; GetPerson(int personId)
     {
         var allPersons = 等待 GetAllPersons();
         等待火力基地
           .Child(“人”)
           .OnceAsync();
         return allPersons.Where(a => a.PersonId == personId).FirstOrDefault();
     }
    
     公共异步任务UpdatePerson(int personId,字符串名称)
     {
         var toUpdatePerson =(等待 firebase
           .Child(“人”)
           .OnceAsync()).Where(a => a.Object.PersonId == personId).FirstOrDefault();
    
         等待火力基地
           .Child(“人”)
           .Child(toUpdatePerson.Key)
           .PutAsync(new Person() { PersonId = personId, Name = 姓名 });
     }
    
     公共异步任务DeletePerson(int personId)
     {
         var toDeletePerson =(等待 firebase
           .Child(“人”)
           .OnceAsync()).Where(a => a.Object.PersonId == personId).FirstOrDefault();
         等待 firebase.Child("Persons").Child(toDeletePerson.Key).DeleteAsync();
    
     }
    }
    

    绑定选择器:

     
    
                 
    
  2. 当您选择项目时想要将项目添加到 Firebase 时,请先获取所选项目,然后添加它。

    使用SelectedIndexChanged事件获取所选项目。然后调用 FirebaseHelper 的 Add 方法。

    void OnPickerSelectedIndexChanged(对象发送者,EventArgs e)
    {
     var picker = (Picker)发送者;
     int selectedIndex = picker.SelectedIndex;
    
     if (selectedIndex != -1)
     {
         selectedItem = (string)picker.ItemsSource[selectedIndex];
     }
    }
    
  1. When you want to display Picker item of firebase realtime using xamarin forms, get the items from firebase first and then binding the items to the picker.

    Model:

    public class Person
    {
     public int PersonId { get; set; }
     public string Name { get; set; }
    }
    

    Get, add, delete items for firebase realtime database:

    public class FirebaseHelper
     {
     FirebaseClient firebase = new FirebaseClient("https://fir-xxxxx-default-rtdb.firebaseio.com/");// the link you could get from your own firebase database. https://console.firebase.google.com/
    
     public async Task<List<Person>> GetAllPersons()
     {
    
         return (await firebase
           .Child("Persons")
           .OnceAsync<Person>()).Select(item => new Person
           {
               Name = item.Object.Name,
               PersonId = item.Object.PersonId
           }).ToList();
     }
    
     public async Task AddPerson(int personId, string name)
     {
    
         await firebase
           .Child("Persons")
           .PostAsync(new Person() { PersonId = personId, Name = name });
     }
    
     public async Task<Person> GetPerson(int personId)
     {
         var allPersons = await GetAllPersons();
         await firebase
           .Child("Persons")
           .OnceAsync<Person>();
         return allPersons.Where(a => a.PersonId == personId).FirstOrDefault();
     }
    
     public async Task UpdatePerson(int personId, string name)
     {
         var toUpdatePerson = (await firebase
           .Child("Persons")
           .OnceAsync<Person>()).Where(a => a.Object.PersonId == personId).FirstOrDefault();
    
         await firebase
           .Child("Persons")
           .Child(toUpdatePerson.Key)
           .PutAsync(new Person() { PersonId = personId, Name = name });
     }
    
     public async Task DeletePerson(int personId)
     {
         var toDeletePerson = (await firebase
           .Child("Persons")
           .OnceAsync<Person>()).Where(a => a.Object.PersonId == personId).FirstOrDefault();
         await firebase.Child("Persons").Child(toDeletePerson.Key).DeleteAsync();
    
     }
    }
    

    Binding for the Picker:

       <Picker ItemsSource="{Binding Names}"
                         ItemDisplayBinding="{Binding Name}" >
    
                 </Picker>
    
  2. When you want to add item to firebase when select item, get the selected item first and then add it.

    Use the SelectedIndexChanged event to get the selected item. And then call the Add method of the FirebaseHelper.

    void OnPickerSelectedIndexChanged(object sender, EventArgs e)
    {
     var picker = (Picker)sender;
     int selectedIndex = picker.SelectedIndex;
    
     if (selectedIndex != -1)
     {
         selectedItem = (string)picker.ItemsSource[selectedIndex];
     }
    }
    
夜深人未静 2025-01-26 15:12:23
         MainPage.xaml 



            <Entry x:Name="TxtName" 
                   Placeholder="Name (Required)"/>
            
            <DatePicker x:Name="date"/>
            <Picker Title="Select a state"
                    x:Name="state"
                    TitleColor="Red">
                <Picker.Items>
                    <x:String>kerala</x:String>
                    <x:String>Pujab</x:String>
                </Picker.Items>
            </Picker>
            <StackLayout  HorizontalOptions="CenterAndExpand" Orientation="Horizontal">
                <Button x:Name="BtnAdd" WidthRequest="200" Text="Add" Clicked="BtnAdd_Clicked"/>
                <Button x:Name="BtnDelete" WidthRequest="200" Text="Delete" Clicked="BtnDelete_Clicked" />
            </StackLayout>

            <StackLayout HorizontalOptions="CenterAndExpand" Orientation="Horizontal">
                <Button x:Name="BtnUpdate" WidthRequest="200" Text="Update" Clicked="BtnUpdate_Clicked" />
            </StackLayout>

            <ListView x:Name="LstPersons" ItemSelected="LstPersons_OnItemSelected">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <TextCell Text="{Binding Name}"></TextCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

     

mainpage.xaml.cs

public partial class MainPage : ContentPage   
{         
    readonly FirebaseHelper firebaseHelper = new FirebaseHelper();

    public MainPage()
    {
        InitializeComponent();
    }


    protected override async void OnAppearing()
    {
        base.OnAppearing();

        await FetchAllPersons();
    }

    private async void BtnAdd_Clicked(object sender, EventArgs e)
    {
        if (!IsFormValid())
        {
            await DisplayAlert("Error", "All are required fields", "OK");
            return;
        }

        Person person = await firebaseHelper.GetPerson(TxtName.Text);

        if (person != null)
        {
            await DisplayAlert("Error", "A person with that name already exist", "OK");
            return;
        }

        await firebaseHelper.AddPerson(TxtName.Text,date.Date, (string)state.SelectedItem);

        TxtName.Text = string.Empty;           
        date.Date = DateTime.Now;
        state.SelectedItem = string.Empty;
       
        await DisplayAlert("Success", "Person Added Successfully", "OK");

        await FetchAllPersons();
    }

    private async void BtnUpdate_Clicked(object sender, EventArgs e)
    {
        if (SelectedPerson == null)
        {
            await DisplayAlert("Error", "A person must be selected to proceed", "OK");
            return;
        }
        
        if (!IsFormValid())
        {
            await DisplayAlert("Error", "All are required fields", "OK");
            return;
        }

        Person person = await firebaseHelper.GetPerson(TxtName.Text);

        if (person != null && person.PersonId != SelectedPerson.PersonId)
        {
            await DisplayAlert("Error", "A person with that name already exist", "OK");
            return;
        }

        await firebaseHelper.UpdatePerson(SelectedPerson.PersonId, TxtName.Text, date.Date, (string)state.SelectedItem);

        TxtName.Text = string.Empty;           
        date.Date = DateTime.Now;
        state.SelectedItem = string.Empty;
        await DisplayAlert("Success", "Person Updated Successfully", "OK");

        await FetchAllPersons();
    }

    private async void BtnDelete_Clicked(object sender, EventArgs e)
    {
        if (SelectedPerson == null)
        {
            await DisplayAlert("Error", "A person must be selected to proceed", "OK");
            return;
        }

        await firebaseHelper.DeletePerson(SelectedPerson.PersonId);

        await DisplayAlert("Success", "Person Deleted Successfully", "OK");

        await FetchAllPersons();
    }

    private async void LstPersons_OnItemSelected(object sender, SelectedItemChangedEventArgs e)
    {
        var person = await firebaseHelper.GetPerson(SelectedPerson.PersonId);

        TxtName.Text = person.Name;           
        date.Date = person.Date;
        state.SelectedItem = person.State;
    }

    private async Task FetchAllPersons()
    {
        var allPersons = await firebaseHelper.GetAllPersons();

        LstPersons.ItemsSource = allPersons;
    }

    private Person SelectedPerson => (Person)LstPersons.SelectedItem;

    private bool IsFormValid() => IsNameValid();

    private bool IsNameValid() => !string.IsNullOrWhiteSpace(TxtName.Text);
                  
}

person.cs

public class Person
{
   
    public Guid PersonId { get; set; }
    public string Name { get; set; }      
    public DateTime Date { get; set; }
    public string State { get; set; }
}

firbasehelper.cs

public class FirebaseHelper

{
    
private readonly string ChildName = "Persons";

    readonly FirebaseClient firebase = new FirebaseClient("https://XXXXXXyour__db_urlXXXXX/");

    public async Task<List<Person>> GetAllPersons()
    {
        return (await firebase
            .Child(ChildName)
            .OnceAsync<Person>()).Select(item => new Person
            {
                PersonId = item.Object.PersonId,
                Name = item.Object.Name,                    
                Date = item.Object.Date,
                State = item.Object.State
            }).ToList();
    }

    public async Task AddPerson(string name,DateTime date, string state)
    {
        await firebase
            .Child(ChildName)
            .PostAsync(new Person() { PersonId = Guid.NewGuid(), Name = name, Date = date,State=state });
    }

    public async Task<Person> GetPerson(Guid personId)
    {
        var allPersons = await GetAllPersons();
        await firebase
            .Child(ChildName)
            .OnceAsync<Person>();
        return allPersons.FirstOrDefault(a => a.PersonId == personId);
    }

    public async Task<Person> GetPerson(string name)
    {
        var allPersons = await GetAllPersons();
        await firebase
            .Child(ChildName)
            .OnceAsync<Person>();
        return allPersons.FirstOrDefault(a => a.Name== name);
    }

    public async Task UpdatePerson(Guid personId, string name,DateTime date, string state)
    {
        var toUpdatePerson = (await firebase
            .Child(ChildName)
            .OnceAsync<Person>()).FirstOrDefault(a => a.Object.PersonId == personId);

        await firebase
            .Child(ChildName)
            .Child(toUpdatePerson.Key)
            .PutAsync(new Person() { PersonId = personId, Name = name,Date = date, State = state });
    }

    public async Task DeletePerson(Guid personId)
    {
        var toDeletePerson = (await firebase
            .Child(ChildName)
            .OnceAsync<Person>()).FirstOrDefault(a => a.Object.PersonId == personId);
        await firebase.Child(ChildName).Child(toDeletePerson.Key).DeleteAsync();
    }
}
         MainPage.xaml 



            <Entry x:Name="TxtName" 
                   Placeholder="Name (Required)"/>
            
            <DatePicker x:Name="date"/>
            <Picker Title="Select a state"
                    x:Name="state"
                    TitleColor="Red">
                <Picker.Items>
                    <x:String>kerala</x:String>
                    <x:String>Pujab</x:String>
                </Picker.Items>
            </Picker>
            <StackLayout  HorizontalOptions="CenterAndExpand" Orientation="Horizontal">
                <Button x:Name="BtnAdd" WidthRequest="200" Text="Add" Clicked="BtnAdd_Clicked"/>
                <Button x:Name="BtnDelete" WidthRequest="200" Text="Delete" Clicked="BtnDelete_Clicked" />
            </StackLayout>

            <StackLayout HorizontalOptions="CenterAndExpand" Orientation="Horizontal">
                <Button x:Name="BtnUpdate" WidthRequest="200" Text="Update" Clicked="BtnUpdate_Clicked" />
            </StackLayout>

            <ListView x:Name="LstPersons" ItemSelected="LstPersons_OnItemSelected">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <TextCell Text="{Binding Name}"></TextCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

     

MainPage.xaml.cs

public partial class MainPage : ContentPage   
{         
    readonly FirebaseHelper firebaseHelper = new FirebaseHelper();

    public MainPage()
    {
        InitializeComponent();
    }


    protected override async void OnAppearing()
    {
        base.OnAppearing();

        await FetchAllPersons();
    }

    private async void BtnAdd_Clicked(object sender, EventArgs e)
    {
        if (!IsFormValid())
        {
            await DisplayAlert("Error", "All are required fields", "OK");
            return;
        }

        Person person = await firebaseHelper.GetPerson(TxtName.Text);

        if (person != null)
        {
            await DisplayAlert("Error", "A person with that name already exist", "OK");
            return;
        }

        await firebaseHelper.AddPerson(TxtName.Text,date.Date, (string)state.SelectedItem);

        TxtName.Text = string.Empty;           
        date.Date = DateTime.Now;
        state.SelectedItem = string.Empty;
       
        await DisplayAlert("Success", "Person Added Successfully", "OK");

        await FetchAllPersons();
    }

    private async void BtnUpdate_Clicked(object sender, EventArgs e)
    {
        if (SelectedPerson == null)
        {
            await DisplayAlert("Error", "A person must be selected to proceed", "OK");
            return;
        }
        
        if (!IsFormValid())
        {
            await DisplayAlert("Error", "All are required fields", "OK");
            return;
        }

        Person person = await firebaseHelper.GetPerson(TxtName.Text);

        if (person != null && person.PersonId != SelectedPerson.PersonId)
        {
            await DisplayAlert("Error", "A person with that name already exist", "OK");
            return;
        }

        await firebaseHelper.UpdatePerson(SelectedPerson.PersonId, TxtName.Text, date.Date, (string)state.SelectedItem);

        TxtName.Text = string.Empty;           
        date.Date = DateTime.Now;
        state.SelectedItem = string.Empty;
        await DisplayAlert("Success", "Person Updated Successfully", "OK");

        await FetchAllPersons();
    }

    private async void BtnDelete_Clicked(object sender, EventArgs e)
    {
        if (SelectedPerson == null)
        {
            await DisplayAlert("Error", "A person must be selected to proceed", "OK");
            return;
        }

        await firebaseHelper.DeletePerson(SelectedPerson.PersonId);

        await DisplayAlert("Success", "Person Deleted Successfully", "OK");

        await FetchAllPersons();
    }

    private async void LstPersons_OnItemSelected(object sender, SelectedItemChangedEventArgs e)
    {
        var person = await firebaseHelper.GetPerson(SelectedPerson.PersonId);

        TxtName.Text = person.Name;           
        date.Date = person.Date;
        state.SelectedItem = person.State;
    }

    private async Task FetchAllPersons()
    {
        var allPersons = await firebaseHelper.GetAllPersons();

        LstPersons.ItemsSource = allPersons;
    }

    private Person SelectedPerson => (Person)LstPersons.SelectedItem;

    private bool IsFormValid() => IsNameValid();

    private bool IsNameValid() => !string.IsNullOrWhiteSpace(TxtName.Text);
                  
}

Person.cs

public class Person
{
   
    public Guid PersonId { get; set; }
    public string Name { get; set; }      
    public DateTime Date { get; set; }
    public string State { get; set; }
}

FirebaseHelper.cs

public class FirebaseHelper

{
    
private readonly string ChildName = "Persons";

    readonly FirebaseClient firebase = new FirebaseClient("https://XXXXXXyour__db_urlXXXXX/");

    public async Task<List<Person>> GetAllPersons()
    {
        return (await firebase
            .Child(ChildName)
            .OnceAsync<Person>()).Select(item => new Person
            {
                PersonId = item.Object.PersonId,
                Name = item.Object.Name,                    
                Date = item.Object.Date,
                State = item.Object.State
            }).ToList();
    }

    public async Task AddPerson(string name,DateTime date, string state)
    {
        await firebase
            .Child(ChildName)
            .PostAsync(new Person() { PersonId = Guid.NewGuid(), Name = name, Date = date,State=state });
    }

    public async Task<Person> GetPerson(Guid personId)
    {
        var allPersons = await GetAllPersons();
        await firebase
            .Child(ChildName)
            .OnceAsync<Person>();
        return allPersons.FirstOrDefault(a => a.PersonId == personId);
    }

    public async Task<Person> GetPerson(string name)
    {
        var allPersons = await GetAllPersons();
        await firebase
            .Child(ChildName)
            .OnceAsync<Person>();
        return allPersons.FirstOrDefault(a => a.Name== name);
    }

    public async Task UpdatePerson(Guid personId, string name,DateTime date, string state)
    {
        var toUpdatePerson = (await firebase
            .Child(ChildName)
            .OnceAsync<Person>()).FirstOrDefault(a => a.Object.PersonId == personId);

        await firebase
            .Child(ChildName)
            .Child(toUpdatePerson.Key)
            .PutAsync(new Person() { PersonId = personId, Name = name,Date = date, State = state });
    }

    public async Task DeletePerson(Guid personId)
    {
        var toDeletePerson = (await firebase
            .Child(ChildName)
            .OnceAsync<Person>()).FirstOrDefault(a => a.Object.PersonId == personId);
        await firebase.Child(ChildName).Child(toDeletePerson.Key).DeleteAsync();
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文