简体   繁体   中英

Xamarin Cross Platform Picker not binding correctly

I am new to Xamarin Cross Platform apps

I am trying to bind a Picker ItemSource to a List and display one property, with out success! My reference has been from here

Please can some one advise where my error is, my View or Xmal please (or probably both)

The List is a List of StdGrades defined as

namespace FitRestults_Dev1
{
    class StdGrade 
    {
        public string Gradelbl
        { get; set; }
        public string Grade
        { get; set; }

        public static List<StdGrade> Grades()
        {
            List<StdGrade> GradesList = new List<StdGrade>(){
                new StdGrade(){ Gradelbl="10th Gup (White belt)", Grade="G10"},
                new StdGrade(){ Gradelbl="9th Gup (Organge belt)", Grade="G9"},
                new StdGrade(){ Gradelbl="8th Gup (Organge belt 1 tag)", Grade="G8"},
               ... };

                return GradesList;

        }  

            public List<StdGrade> GradesList => Grades();


            public static string GetGrade(string Input)
        {
            List<StdGrade> GradesList = Grades();
            var result = (from r in GradesList where r.Gradelbl == Input select r).First();

            return result.Grade;


        }

    }

For the Content page I have defined a simple view as

    namespace FitRestults_Dev1
{
    class AddStudentView 
    {
        List<StdGrade> _GradeList;

            public List<StdGrade> GradeList

        { get => _GradeList;
            set
            {
                _GradeList = StdGrade.Grades();

            }
        }
    }
}

My content page xmal is

    <?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="FitRestults_Dev1.AddStudent"
             xmlns:src="clr-namespace:FitRestults_Dev1"
             >
     <ContentPage.BindingContext>
            <src:AddStudentView/>
        </ContentPage.BindingContext>
    <ContentPage.Content>

        <StackLayout Padding="10" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
            <Grid>
                …
                <Picker x:Name="GradePicker" Title="Select a Grade" Grid.Row="2" Grid.Column="1" MinimumWidthRequest="100" FontSize="12"
                     ItemsSource="GradeList" SelectedIndex="0" ItemDisplayBinding="{Binding Gradelbl}">
                </Picker>
            </StackLayout>
    </ContentPage.Content>
</ContentPage>

You are providing the itemsSource the incorrect way it should be a binding

  ItemsSource={Binding GradeList}

Also Stop using Generic.List for binding, MVVM with Xamarin Forms should have ObservableCollections as it inherits from INotifyPropertyChanged and INotifyCollectionChanged

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM