IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[XAMARIN FORMS] problème de liaison entre ma vue et ma vue model [Débutant]


Sujet :

C#

  1. #1
    Membre averti Avatar de ShadeKode
    Homme Profil pro
    Etudiant EPSI
    Inscrit en
    Juin 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Etudiant EPSI
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2018
    Messages : 19
    Par défaut [XAMARIN FORMS] problème de liaison entre ma vue et ma vue model
    Bonjour à tous,

    je me trouve face à un petit problème, je m'explique :

    voici ce que j'ai fait, j'ai une page avec des boutons (avec des valeurs différents ) et un picker(voir le code xaml), quand l'utilisateur clique sur un bouton, normalement la liste de sélection du picker propose des éléments qui sont en lien à la valeur de mon bouton grâce à des listes (voir mon code view model). Sauf que ça ne fonctionne pas !

    Selon moi c'est à cause du type static qu'il y a sur certaines de mes listes et méthodes. Ducoup mon picker qui à un binding sur une de mes listes n'affiche pas ma sélection car il n'arrive pas à accéder à ma liste vu qu'elle est en static et non constructeur (dans lequel j’appelle l'élément de mon binding).

    Avez vous une solution à me proposer ?

    Si vous n'arrivez pas à me comprendre n'hésiter pas a me poser des questions ?

    vous trouverez les différents fichier avec mon code ci dessous.

    Cordialement
    Camille

    mon code xaml non du fichier : StatementReferencielPage.xaml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
     
    <?xml version="1.0" encoding="utf-8" ?>
    <ContentPage
        x:Class="PolQual.Views.StatementReferencielPage"
        xmlns="http://xamarin.com/schemas/2014/forms"
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
        xmlns:local="clr-namespace:PolQual.Views"
        xmlns:viewModels="clr-namespace:PolQual.ViewModels;assembly=PolQual"
        Title="Accueil">
     
        <ContentPage.BindingContext>
            <viewModels:StatementReferencielPageModel />
        </ContentPage.BindingContext>
     
        <ContentPage.Content>
     
            <StackLayout>
     
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="10*" />
                        <RowDefinition Height="15*" />
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="100*" />
                    </Grid.ColumnDefinitions>
     
                    <Label
                        Grid.Row="0"
                        Grid.Column="0"
                        FontSize="25"
                        HorizontalOptions="Center"
                        Text="Information sur le relevé référenciel" />
     
                </Grid>
     
                <ScrollView>
                    <Grid x:Name="gridLayout" />
                </ScrollView>
     
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="2*" />
                        <RowDefinition Height="3*" />
                        <RowDefinition Height="8*" />
                        <RowDefinition Height="2*" />
                        <RowDefinition Height="3*" />
                        <RowDefinition Height="6*" />
                        <RowDefinition Height="3*" />
                        <RowDefinition Height="6*" />
                        <RowDefinition Height="3*" />
                        <RowDefinition Height="6*" />
                        <RowDefinition Height="5*" />
                        <RowDefinition Height="6*" />
                        <RowDefinition Height="1*" />
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="25*" />
                        <ColumnDefinition Width="50*" />
                        <ColumnDefinition Width="25*" />
                    </Grid.ColumnDefinitions>
     
                    <Label
                        Grid.Row="1"
                        Grid.Column="1"
                        FontSize="15"
                        Text="Veuillez sélectioner le secteur :" />
     
                    <Picker
                        x:Name="PickerSectorsLists"
                        Title="Sélectionner votre secteur"
                        Grid.Row="2"
                        Grid.Column="1"
                        ItemDisplayBinding="{Binding Value}"
                        ItemsSource="{Binding SectorsFindLists}"
                        SelectedItem="{Binding SelectedSector}" />
     
                    <Label
                        Grid.Row="4"
                        Grid.Column="1"
                        FontSize="15"
                        Text="{Binding ShowHouseholdTrash}" />
     
                    <Switch
                        x:Name="SwitchHousehodTrash"
                        Grid.Row="5"
                        Grid.Column="1"
                        HorizontalOptions="Start"
                        IsToggled="{Binding HouseholdTrash}" />
     
                    <Label
                        Grid.Row="6"
                        Grid.Column="1"
                        FontSize="15"
                        Text="{Binding ShowBoxboard}" />
     
                    <Switch
                        x:Name="SwitchBoxboard"
                        Grid.Row="7"
                        Grid.Column="1"
                        HorizontalOptions="Start"
                        IsToggled="{Binding Boxboard}" />
     
                    <Label
                        Grid.Row="8"
                        Grid.Column="1"
                        FontSize="15"
                        Text="{Binding ShowGlass}" />
     
                    <Switch
                        x:Name="SwitchGlass"
                        Grid.Row="9"
                        Grid.Column="1"
                        HorizontalOptions="Start"
                        IsToggled="{Binding Glass}" />
     
                    <Button
                        Grid.Row="11"
                        Grid.Column="1"
                        BackgroundColor="#2196f3"
                        Clicked="GoToAssesmentGrid"
                        FontSize="20"
                        Text="Valider les informations"
                        TextColor="White" />
     
                </Grid>
     
            </StackLayout>
     
        </ContentPage.Content>
    </ContentPage>
    mon code behind

    Code cs : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    using Xamarin.Forms;
    using Xamarin.Forms.Xaml;
    using PolQual.ViewModels;
     
    namespace PolQual.Views
    {
    	[XamlCompilation(XamlCompilationOptions.Compile)]
    	public partial class StatementReferencielPage : ContentPage
    	{
            public StatementReferencielPage()
    		{
    			InitializeComponent ();
                BindingContext = new StatementReferencielPageModel();
                gridLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(40) });
                gridLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(40) });
                gridLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(40) });
                gridLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(40) });
                gridLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(40) });
                gridLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(40) });
                gridLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(40) });
                //collmun
                gridLayout.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(25, GridUnitType.Star) });
                gridLayout.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(50, GridUnitType.Star) });
                gridLayout.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(25, GridUnitType.Star) });
     
                var PolesListsIndex = 0;
     
                for (int columnIndex = 1; columnIndex < 2; columnIndex++)
                {
                    for (int rowIndex = 0; rowIndex < 7; rowIndex++)
                    {
                        if (PolesListsIndex >= StatementReferencielPageModel.PolesLists.Count<Pole>())
                        {
                            return;
                        }
                        var poles = StatementReferencielPageModel.PolesLists[PolesListsIndex];
                        PolesListsIndex += 1;
     
                        var button = new Button()
                        {                   
                            Text = poles.Name,
                            BackgroundColor = Color.FromHex(poles.Color),
                            HorizontalOptions = LayoutOptions.Center,
                            VerticalOptions = LayoutOptions.Center,
                            WidthRequest = 280,
                        };
                        string request = StatementReferencielPageModel.PolesLists[rowIndex].Name;
                        button.Clicked += delegate { MaFunction(request); };// anonymous method
                        gridLayout.Children.Add(button, columnIndex, rowIndex);  
     
                    }
                }
            }
     
            public static void MaFunction(string polename)
            {
               StatementReferencielPageModel.FindPoleName(polename);
            }
     
            public void GoToAssesmentGrid(object sender, System.EventArgs e)
            {
                if (PickerSectorsLists.SelectedIndex == -1) 
                {
                    DisplayAlert("Erreur de saisie", "Veuillez séléctioner un secteur svp! ", "D'accord");
                }
                else
                {
                    var page = new AssesmentGridPage();
                    Navigation.PushAsync(page);
                }
             }
        }
    }

    ma page viewModel qui se nome StatementReferencielPageModel

    Code cs : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Linq;
    using System.Runtime.CompilerServices;
    using System.Text;
    using Xamarin.Forms;
    using PolQual.Views;
     
    namespace PolQual.ViewModels
    {
        public class StatementReferencielPageModel : INotifyPropertyChanged
        {
            private static List<Sector> _sectorsLists;
            public static List<Sector> SectorsLists { get => _sectorsLists; set => _sectorsLists = value; }
     
            private readonly List<Sector> sectorsFindLists;
            private static List<Sector> _sectorsFindLists;
            public static List<Sector> SectorsFindLists { get => _sectorsFindLists; set => _sectorsFindLists = value; }
     
            private static List<Pole> _polesLists;
            public static List<Pole> PolesLists { get => _polesLists; set => _polesLists = value; }
     
            public event PropertyChangedEventHandler PropertyChanged;
     
            public void OnPropertyChanged([CallerMemberName] string propertyname = null)
            {
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyname));
            }
     
            private bool _boxboard { get; set; }
            public bool Boxboard
            {
                get { return _boxboard; }
                set
                {
                    _boxboard = value;
                    OnPropertyChanged();
                    OnPropertyChanged(nameof(ShowBoxboard));
                }
            }
     
            private bool _glass { get; set; }
            public bool Glass
            {
                get { return _glass; }
                set
                {
                    _glass = value;
                    OnPropertyChanged();
                    OnPropertyChanged(nameof(ShowGlass));
                }
            }
     
            private bool _householdTrash { get; set; }
            public bool HouseholdTrash
            {
                get { return _householdTrash; }
                set
                {
                    _householdTrash = value;
                    OnPropertyChanged();
                    OnPropertyChanged(nameof(ShowHouseholdTrash));
                }
            }
     
            private Sector _selectedSector { get; set; }
            public Sector SelectedSector
            {
                get { return _selectedSector; }
                set
                {
                    if (_selectedSector != value)
                    {
                        _selectedSector = value;
                        // que faire quand l'élèment est sélectionné !
                    }
                }
            }
     
            public StatementReferencielPageModel()
            {
                SectorsLists = GetSectors().OrderBy(t => t.Key).ToList();
                SectorsFindLists = GetSectors().OrderBy(t => t.Key).ToList();
                PolesLists = GetPoles().OrderBy(t => t.Key).ToList();
            }
     
            public List<Sector> GetSectors()
            {
                var Sectors = new List<Sector>()
                {
                    //Erdre et cens
                    new Sector() { Key = 0, Value = "Sautron", PoleName="Erdre et cens" },
                    new Sector() { Key = 1, Value = "Orvault", PoleName="Erdre et cens" },
                    new Sector() { Key = 2, Value = "Nantes Nord", PoleName="Erdre et cens" },
                    new Sector() { Key = 3, Value = "La-Chapelle-Sur-Erdre", PoleName="Erdre et cens" },
                    // Erdre et Loire
                    new Sector() { Key = 4, Value = "Mauves-Sur-Loire", PoleName="Erdre et Loire" },
                    new Sector() { Key = 5, Value = "Carquefou", PoleName="Erdre et Loire" },
                    new Sector() { Key = 6, Value = "Thouré sur Loire", PoleName="Erdre et Loire" },
                    new Sector() { Key = 7, Value = "Sainte Luce sur Loire", PoleName="Erdre et Loire" },
                    new Sector() { Key = 8, Value = "Nantes Erdre", PoleName="Erdre et Loire" },
                    new Sector() { Key = 9, Value = "Doulon", PoleName="Erdre et Loire" },
                    //Loire-Sèvre et Vignoble
                    new Sector() { Key = 10, Value = "Rezé", PoleName="Loire-Sèvre et Vignoble" },
                    new Sector() { Key = 11, Value = "Les Sornières", PoleName="Loire-Sèvre et Vignoble" },
                    new Sector() { Key = 12, Value = "Vertou", PoleName="Loire-Sèvre et Vignoble" },
                    new Sector() { Key = 13, Value = "Saint Sébastien sur Loire", PoleName="Loire-Sèvre et Vignoble" },
                    new Sector() { Key = 14, Value = "Base Goulaine", PoleName="Loire-Sèvre et Vignoble" },
                    new Sector() { Key = 15, Value = "Nantes sud", PoleName="Loire-Sèvre et Vignoble" },
                    //Sud-Ouest
                    new Sector() { Key = 16, Value = "Bouchenais", PoleName="Sud-Ouest" },
                    new Sector() { Key = 17, Value = "Saint-Aignan-Grandlieu", PoleName="Sud-Ouest" },
                    new Sector() { Key = 18, Value = "Bouaye", PoleName="Sud-Ouest" },
                    new Sector() { Key = 19, Value = "Saint-Leger-Les-Vignes", PoleName="Sud-Ouest" },
                    new Sector() { Key = 20, Value = "Brains", PoleName="Sud-Ouest" },
                    new Sector() { Key = 21, Value = "La-Montagne", PoleName="Sud-Ouest" },
                    new Sector() { Key = 22, Value = "Saint-Jean-De-Boiseau", PoleName="Sud-Ouest" },
                    new Sector() { Key = 23, Value = "Le Pellerin", PoleName="Sud-Ouest" },
                    //Loire-Chézine
                    new Sector() { Key = 24, Value = "Couëron", PoleName="Loire-Chézine" },
                    new Sector() { Key = 25, Value = "Saint-Herblain", PoleName="Loire-Chézine" },
                    new Sector() { Key = 26, Value = "Indre", PoleName="Loire-Chézine" },
                    //Nantes-Ouest
                    new Sector() { Key = 27, Value = "Bellevue-Chantenay-Sainte-Anne", PoleName="Nantes-Ouest" },
                    new Sector() { Key = 28, Value = "Dervallière-Zola", PoleName="Nantes-Ouest" },
                    new Sector() { Key = 29, Value = "Breil-Barberie", PoleName="Nantes-Ouest" },
                    new Sector() { Key = 30, Value = "Hauts Pavés Saint Félix", PoleName="Nantes-Ouest" },
                    //Nantes-Loire
                    new Sector() { Key = 31, Value = "Malakof-Saint-Donatien", PoleName="Nantes-Loire" },
                    new Sector() { Key = 32, Value = "Centre Ville", PoleName="Nantes-Loire" },
                    new Sector() { Key = 33, Value = "île de Nantes", PoleName="Nantes-Loire" },
     
                };
                return Sectors;
            }
     
            public List<Pole> GetPoles()
            {
                var Poles = new List<Pole>()
                {
                    new Pole { Key = 1, Name = "Erdre et Cens", Color = "ffccd5"},
                    new Pole { Key = 2, Name = "Erdre et Loire", Color = "ff4d4d"},
                    new Pole { Key = 3, Name = "Loire-Sèvre et vignoble", Color = "ff9933"},
                    new Pole { Key = 4, Name = "Sud-Ouest", Color = "bfbfbf"},
                    new Pole { Key = 5, Name = "Loire-chézine", Color = "ffff4d"},
                    new Pole { Key = 6, Name = "Nantes-Ouest", Color = "3385ff"},
                    new Pole { Key = 7, Name = "Nantes-Loire", Color = "53c653"},
                };
                return Poles;
            }
     
            public static void FindPoleName(string polename)
            {
                for (int search = 0; search < SectorsLists.Count(); search++)
                {
                    if (SectorsLists[search].PoleName == polename)
                    {
                        SectorsFindLists.Add(new Sector() {Key = search, Value = SectorsLists[search].Value, PoleName = polename });
                    }
                }
            }
     
            public string ShowBoxboard
            {
                get
                {
                    return $"{(_boxboard ? "Jour de collecte des cartons : oui " : "Jour de collecte des cartons : non")}";
                }
            }
     
            public string ShowGlass
            {
                get
                {
                    return $"{(_glass ? "Jour de collecte du verre : oui " : "Jour de collecte du verre : non")}";
                }
            }
     
            public string ShowHouseholdTrash
            {
                get
                {
                    return $"{(_householdTrash ? "Jour de collecte des Ordure ménagère : oui " : "Jour de collecte des Ordure ménagère : non")}";
                }
            }
        }
     
        public class Sector
        {
            private int _key;
            public int Key { get => _key; set => _key = value; }
     
            private string _value;
            public string Value { get => _value; set => _value = value; }
     
            private string _poleName;
            public string PoleName { get => _poleName; set => _poleName = value; }
        }
     
        public class Pole
        {
            private int _key;
            public int Key { get => _key; set => _key = value; }
     
            private string _color;
            public string Color { get => _color; set => _color = value; }
     
            private string _name;
            public string Name { get => _name; set => _name = value; }
        }
    }

  2. #2
    Membre averti Avatar de ShadeKode
    Homme Profil pro
    Etudiant EPSI
    Inscrit en
    Juin 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Etudiant EPSI
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2018
    Messages : 19
    Par défaut Problème résolu
    Finalement j'ai réussit à résoudre mon problème !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/08/2007, 09h22
  2. [X] Problème de liaisons entre marker d'un graph
    Par axel-erator dans le forum SAP Crystal Reports
    Réponses: 16
    Dernier message: 29/06/2007, 14h40
  3. [Access 2003]Problème de liaison entre table
    Par steeves5 dans le forum Access
    Réponses: 3
    Dernier message: 12/06/2006, 09h40
  4. Réponses: 3
    Dernier message: 20/05/2006, 00h28
  5. Problèmes de liaisons entre tables ...
    Par Mangun dans le forum Access
    Réponses: 2
    Dernier message: 28/09/2005, 11h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo