Xamarin 表单选取器数据绑定



我有一个 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; }
}
}

这是视图模型

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://learn.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/picker/populating-itemssource'

最新更新