[英]Xamarin forms picker data binding
我有一個Xamarin項目,其中包含一個頁面,其中包含有關外科病例的詳細信息。 我添加了一個選擇器,可以選擇可以與手術盒相關的眼睛列表。 選擇器僅顯示對象,而不顯示列表中的數據。 我究竟做錯了什么? 這是代碼
<?xml version="1.0" encoding="utf-8" ?>
<forms:ContentPage
x:Class="SxQiApp.EditSxCasePage"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:forms="clr-namespace:Xamarin.Forms;assembly=Xamarin.Forms.Core"
xmlns:viewModels="clr-namespace:SxQiApp.ViewModels;assembly=SxQiApp">
<forms:ContentPage.BindingContext>
<viewModels:SxCaseViewModel />
</forms:ContentPage.BindingContext>
<forms:StackLayout>
<Label Text="Record" />
<Entry Text="{Binding SelectedSxCase.Record}" />
<Label Text="Case" />
<Entry Text="{Binding SelectedSxCase.Facesheet}" />
<Label Text="Return OR" />
<Switch IsToggled="{Binding SelectedSxCase.ReturnOr}" />
<Label Text="Complication" />
<Switch IsToggled="{Binding SelectedSxCase.Complication}" />
<Picker Title="Eye" ItemsSource="{Binding Eyes}" ItemDisplayBinding="{Binding Eyes}" />
<Label Text="{Binding SelectedEye}" />
<Button Command="{Binding PutSxCaseCommand}" Text="Edit Case" />
<Button Command="{Binding DeleteSxCaseCommand}" Text="Delete Case" />
</forms:StackLayout>
</forms:ContentPage>
這是背后的代碼
using SxQiApp.ViewModels;
using Xamarin.Forms;
namespace SxQiApp
{
// XamlC is set in App.xaml.cs
//[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class EditSxCasePage : ContentPage
{
public EditSxCasePage()
{
InitializeComponent();
}
public EditSxCasePage(SxCaseViewModel SxCaseViewModel)
{
InitializeComponent();
this.SxCaseViewModel = SxCaseViewModel;
BindingContext = SxCaseViewModel;
}
public SxCaseViewModel SxCaseViewModel { get; }
}
}
這是ViewModel
using SxQiApp.Models;
using SxQiApp.Services;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using System.Windows.Input;
using Xamarin.Forms;
namespace SxQiApp.ViewModels
{
public class SxCaseViewModel : INotifyPropertyChanged
{
private List<SxCase> _sxcase;
private SxCaseDataService _sxCaseDataService = new SxCaseDataService();
private SxCase _selectedSxCase;
private List<Eye> _eye;
private EyeDataService _eyeDataService = new EyeDataService();
private Eye _selectedEye;
public SxCase SelectedSxCase
{
get { return _selectedSxCase; }
set
{
_selectedSxCase = value;
OnPropertyChanged();
}
}
public List<SxCase> SxCases
{
get
{
return _sxcase;
}
set
{
_sxcase = value;
OnPropertyChanged();
}
}
public Command PutSxCaseCommand
{
get
{
return new Command(async () =>
{
var sxCaseDataService = new SxCaseDataService();
await sxCaseDataService.PutSxCase(_selectedSxCase.SxCaseId, _selectedSxCase);
});
}
}
public Command DeleteSxCaseCommand
{
get
{
return new Command(async () =>
{
var sxCaseDataService = new SxCaseDataService();
await sxCaseDataService.DeleteSxCaseAsync(_selectedSxCase.SxCaseId);
});
}
}
public ICommand AddRecordCommand => new Command(async () =>
{
await _sxCaseDataService.PostSxCase(SelectedSxCase);
});
public SxCaseViewModel()
{
SelectedSxCase = new SxCase();
GetSxCases();
SelectedEye = new Eye();
GetEyes();
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName]string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private async Task GetSxCases()
{
SxCases = await _sxCaseDataService.GetSxCases();
}
public Eye SelectedEye
{
get { return _selectedEye; }
set
{
_selectedEye = value;
OnPropertyChanged();
}
}
public List<Eye> Eyes
{
get
{
return _eye;
}
set
{
_eye = value;
OnPropertyChanged();
}
}
private async Task GetEyes()
{
Eyes = await _eyeDataService.GetEyes();
}
}
}
您的綁定是對象:
<Picker Title="Eye" ItemsSource="{Binding Eyes}" ItemDisplayBinding="{Binding Eyes}" />
public List<Eye> Eyes {get;set;}
如果要顯示Eye
某些屬性,則需要綁定到它:
(這將綁定到Eye
對象的.Name
屬性)。
https:// docs.microsoft.com/ zh- cn/ xamarin/ xamarin- forms/ user- interface/ picker/ populating- itemssource`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.