Liaison de commande de la barre d'outils maître / détail

Sven Bardos

J'ai l'application suivante avec une barre d'outils, une liste de maîtres et une vue détaillée:

Aperçu

Le détail est "injecté" via ContentControl. Le détail contient un UserControl, qui contient un ScrollViewer et ainsi de suite. À un moment donné, il y a un "ZoomPanControl" (pas le mien) qui fournit une commande "FitView".

Je souhaite exécuter la commande "FitView" depuis ma barre d'outils pour la vue détaillée actuellement active.

Le bouton de ma barre d'outils ressemble à ceci:

<fluent:Button x:Name="FitButton" Command="{Binding ?WhatGoesHere?}" Header="Fit View"/>

Je ne peux pas comprendre comment lier la propriété de commande du bouton de la barre d'outils au ZoomPanControl actuellement actif. Je ne "vois" même pas ce contrôle lors de la liaison de commande.

Any hint how this problem is generally solved is highly appreciated.

Sven Bardos

Here's how I solved the problem. Luckily I have access to the source code of the ZoomPanControl.

First I have implemented a DependencyProperty in the ZoomPanControl for the "FitView" command like this:

public static readonly DependencyProperty FitCommandDepPropProperty =   DependencyProperty.Register(
        "FitCommandDepProp", typeof (ICommand), typeof (ZoomAndPanControl),   new PropertyMetadata(default(ICommand)));

    public ICommand FitCommandDepProp
    {
        get { return (ICommand) GetValue(FitCommandDepPropProperty); }
        set { SetValue(FitCommandDepPropProperty, value); }
    }

In the "OnApplyTemplate()" method of the control I set the dependency property:

FitCommandDepProp = FitCommand;

In the detail-View of my application I bind the command-dependency-property to my ViewModel like this:

<zoomAndPan:ZoomAndPanControl x:Name="zoomAndPanControl" 
                                      FitCommandDepProp="{Binding FitCommand, Mode=OneWayToSource}"

The important part is Mode=OneWayToSource. This "forwards" the command from the ZoomPanControl to my detail-viewmodel.

Detail-viewmodel a la propriété de ICommand à laquelle se lier. À partir de ce moment, j'ai la commande dans ma logique viewmodel. J'ai implémenté un mécanisme pour passer le FitCommand au viewmodel qui est lié à la barre d'outils. Vous pouvez utiliser un événement ou ce que vous préférez pour passer la commande.

Le modèle de vue de la barre d'outils a à nouveau une propriété ICommand pour FitCommand.

public ICommand FitCommand
    {
        get { return _fitCommand; }
        set
        {
            if (Equals(value, _fitCommand)) return;
            _fitCommand = value;
            NotifyOfPropertyChange(() => FitCommand);
        }
    }

Dans la vue de la barre d'outils, je me lie simplement à cette propriété:

<fluent:Button x:Name="FitButton" Command="{Binding FitCommand}" Header="Fit View"/>

Après cela, les commandes de vue sont disponibles pour chaque vue de détail séparément.

Mais je n'ai aucune idée de comment résoudre ce problème sans accéder au code source de ZoomPanControl.

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Erreur de liaison dans la barre d'outils masquée

Raccourcis de la commande TortoiseGit dans la barre d'outils de la fenêtre

Nom de code une commande de la barre d'outils pour faire apparaître le menu

Comment modifier dynamiquement le texte de la commande de la barre d'outils

Barre d'outils non visible dans la liaison de données

Configuration de la barre d'outils Android

Modification de la barre d'outils Android

Style de la barre d'outils Android

Boutons de la barre d'outils Excel

Automatisation de la barre d'outils Xamarin

Fragment aveugle de la barre d'outils

Commande de rotation infinie (ou bouton) dans la barre d'outils du nom de code un

Propriété de requête de liaison de données Android de SearchView dans la barre d'outils

Afficher la barre de progression dans la barre d'outils

Comment déplacer la fenêtre de la barre d'outils droite devant la fenêtre de la barre d'outils inférieure dans intelliJ IDEA?

Barre de progression sous la barre d'outils dans CoordinatorLayout

Barre d'outils disparaît tout en remplaçant fragment lors de la liaison de données dans Android

Gravité des boutons de la barre d'outils pour la barre d'outils étendue

intégration de la barre d'outils KENDOUI avec la barre d'outils Grille

Bouton de débordement de la barre d'outils activé

Désactiver le défilement de la barre d'outils

Impossible de changer la couleur de la barre d'outils

affichage de l'image de ma barre d'outils comme arrière-plan de la barre d'état effet de la barre de navigation dans Android

Barre d'outils transparente pour la barre d'outils de réduction étendue

Python OpenCV - supprimer la barre de titre, la barre d'outils et la barre d'état

quel est le cercle à droite de ma barre d'outils

Afficher en haut de ma barre d'outils sous Android

Impossible de définir la barre d'outils sous Android

Définir le titre de la barre d'outils

TOP liste

  1. 1

    Comment exécuter un fichier python avec des droits d'administrateur dans pycharm

  2. 2

    obtenir le nombre de marqueur affiché sur la carte

  3. 3

    comment obtenir un objet de requête dans les tests unitaires de django?

  4. 4

    Microsoft.WebApplication.targets

  5. 5

    Comment ajouter un texte dans un texte Python/Tkinter

  6. 6

    comment convertir une chaîne en un tuple dateutil jour de la semaine sans utiliser eval

  7. 7

    mongo kafka connect source

  8. 8

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  9. 9

    Dans les modèles Hugo, comment vérifier la longueur du tableau de fichiers JSON?

  10. 10

    Référencement des assemblys de structure .net 4.7 dans la solution .net core 2

  11. 11

    Comment obtenir tous les champs d'un objet (y compris sa superclasse), à l'aide de l'API Mirrors de Dart?

  12. 12

    Exécuter la requête externe pour chaque date obtenue à partir de la requête interne

  13. 13

    Recherche de dicton Jinja2 à l'aide d'une clé variable

  14. 14

    Laravel 8: Attempt to read property "id" on null

  15. 15

    définir une propriété pour chaque nœud dans neo4j

  16. 16

    Vérifier la longueur du nombre à partir du message, puis utiliser la valeur dans l'instruction

  17. 17

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  18. 18

    Aide de variable de débogage pprint jinja2

  19. 19

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  20. 20

    Impression de la longueur du chemin le plus court dans le labyrinthe

  21. 21

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

chaudétiquette

Archive