Commande de liaison dans UWP

J’ai un MenuFlyout dans mon App.xaml:

      

Et je voulais donner un événement de clic à MenuFlyoutItem mais le compilateur dit que je ne peux pas le faire. Mais j’ai besoin d’un événement de clic, j’ai donc cherché et découvert que je pouvais lier une commande à MenuFlyoutItem.

Mon MenuFlyout sera attaché à différents objects dans différentes pages. Par exemple:

  StackPanel thisSender = sender as StackPanel; FlyoutBase.SetAttachedFlyout(thisSender, Application.Current.Resources["LessonFlyout"] as MenuFlyout); FlyoutBase.ShowAttachedFlyout(thisSender); 

J’ai donc besoin lorsque je clique sur MenuFlyoutItem, il appellera ma fonction. Alors, comment je fais ça?

Autre question rapide, dans la page officielle de Microsoft à propos de MenuFlyout, il est indiqué qu’il existe un atsortingbut Icon dans MenuFlyoutItem, mais dans mon cas, je ne l’ai pas et VS dit qu’il y a une erreur.

 The member "Icon" is not recognized or is not accessible. The property 'Icon' was not found in type 'MenuFlyoutItem'. 

Pour des objects différents dans des pages différentes, le MenuFlyoutItem et sa Command seraient différents. Par conséquent, nous ne MenuFlyout généralement pas le MenuFlyout dans Application.Resources . Mais si vous pouvez vous assurer que les éléments MenuFlyoutItem utilisés dans différentes Page sont identiques, les solutions suivantes peuvent constituer une solution.

Tout d’abord, dans App.xaml , définissez Binding for Command :

       

Puis implémentez I Command Interface comme RelayCommand.cs dans l’échantillon officiel.

Après cela, nous devons implémenter EditCommand et DeleteCommand dans le modèle de vue pour que la liaison puisse fonctionner. Par exemple:

 public class ViewModel { public ICommand EditCommand { get; set; } public ICommand DeleteCommand { get; set; } public ViewModel() { EditCommand = new RelayCommand(() => { //TODO System.Diagnostics.Debug.WriteLine("EditCommand"); }); DeleteCommand = new RelayCommand(() => { //TODO System.Diagnostics.Debug.WriteLine("DeleteCommand"); }); } } 

Et puis attachez le MenuFlyout comme:

 StackPanel thisSender = sender as StackPanel; thisSender.DataContext = new ViewModel(); FlyoutBase.SetAttachedFlyout(thisSender, Application.Current.Resources["LessonFlyout"] as MenuFlyout); FlyoutBase.ShowAttachedFlyout(thisSender); 

Le ViewModel utilisé ici est juste pour exemple, vous devriez normalement avoir un modèle de vue pour votre page et le cas échéant, il n’est pas nécessaire de définir DataContext lorsque vous MenuFlyout . Définir EditCommand et DeleteCommand dans le modèle d’affichage de votre page devrait suffire à fonctionner.


Pour l’erreur suivante:

Le membre “Icône” n’est pas reconnu ou n’est pas accessible.
La propriété ‘Icon’ est introuvable dans le type ‘MenuFlyoutItem’.

En effet, votre projet cible une version antérieure à la génération 15063 . Dans la propriété Icon , nous pouvons trouver des fonctionnalités supplémentaires et des exigences indiquant que cette propriété est introduite dans la mise à jour de Windows 10 Creators (v10.0.15063.0) . Donc, pour utiliser cette propriété, assurez-vous de cibler la version 15063 ou ultérieure.