2017-03-24 1 views
1

J'ai cherché partout à résoudre ce problème, je n'utilise pas de formes Xamarin depuis longtemps mais je pensais que cela aurait été facile. J'essaie de lier un sélecteur selecteditemchanged à une commande dans le modèle de vue, j'utilise FreshMVVM et Xamarin forme la version 2.3.4.214-pre5, je suis capable de lier les données du modèle de vue, mais il n'y a pas d'option de commande dans le cueilleur.Liaison d'un sélecteur à la commande mvvm Xamarin forms

Toute aide serait appréciée. Merci

+0

Je pense qu'il existe une propriété SelectedItem qui change lorsque vous sélectionnez une valeur. Quelle commande recherchez-vous? –

Répondre

0

Pour exécuter du code lorsqu'un élément de sélecteur est sélectionné, spécifiez la SelectedIndexChanged propriété de votre préparateur:

<Picker x:Name="myPicker" SelectedIndexChanged="indexChanged"/> 

Puis dans votre code derrière ajoutez votre méthode indexChanged:

void indexChanged(object sender, EventArgs e) 
{ 
    //Your code here 
} 

Ensuite, , lorsqu'un utilisateur sélectionne un élément différent de votre sélecteur, il exécute la méthode indexChanged.

+1

Cela fonctionnerait mais j'essaye de le lier à la commande de mvvm où je mets à jour le modèle pendant que les sélections sont faites. J'ai besoin de le lier à la commande. – theshwaguy

+0

[Consultez ce site Web] (https://developer.xamarin.com/guides/xamarin-forms/xaml/xaml-basics/data_bindings_to_mvvm/) et, dans la section Commanding with ViewModels, affiche les vues qui prennent en charge l'interface de commande. 'Picker' n'en fait pas partie, donc si vous devez utiliser' Command', un 'Picker' ne fonctionnera pas pour vous. – cvanbeek

4

Je suis en mesure d'obtenir une solution de travail:

Tout d'abord j'ai installé Xamarin Forms version 2.3.4.214-pre5, il fonctionne très bien. Puis, avec l'aide du Forum Xamarin, on m'a donné une solution, qui est comme suit-:

1 - Installez le paquet NuGet Behaviors.Forms en exécutant Install-Package Behaviors.Forms dans la console de gestionnaire de paquets NuGet.

2 - Ensuite, inclure l'espace de noms suivant dans la page XAML:

<ContentPage xmlns:behaviors="clr-namespace:Behaviors;assembly=Behaviors"> 
</ContentPage> 

3 - Ensuite, ajoutez l'attribut Picker.Behaviors dans la balise Picker:

<Picker x:Name="MyPicker" 
      ItemsSource="{Binding IdentityProviders}" 
      HorizontalOptions="FillAndExpand" Title="Identity Provider" 
      Margin="10" 
      ItemDisplayBinding="{Binding Description}"> 
    <Picker.Behaviors> 
      <behaviors:EventHandlerBehavior EventName="SelectedIndexChanged"> 
       <behaviors:InvokeCommandAction Command="{Binding SelectedProviderChanged}" /> 
      </behaviors:EventHandlerBehavior> 
    </Picker.Behaviors> 
</Picker> 

Si vous voulez transmettre les données de retour en tant que paramètre puis inclure les éléments suivants après la commande CommandParameter="{Reference MyPicker}"

Cela a résolu mon problème, j'espère que cela aide : L'aide que j'ai reçu était de ce poste MVVM Light - How to use the selectedIndexChanged event in viewModel

+0

C'est une bonne astuce. Je crois qu'il devrait être facilement portable à n'importe quel type de contrôle. Merci d'avoir partagé! –