Reliure un bouton isEnabled / propriétés de visibilité en utilisant ses x: Nom comme paramètre dans une méthode dans le code-behind

StackOverflow https://stackoverflow.com/questions/4325020

Question

Je dois passer au nom de contrôles à une méthode dans un objet de sécurité qui renvoie une valeur booléenne pour la propriété IsEnabled et une autre méthode qui retourne sa visibilité (Collapsed, cachée ou visible). Ces deux doivent être vérifiés à des fins d'autorisation.

J'ai essayé d'utiliser un ObjectDataProvider mais tous les exemples montrent que l'entrée d'utilisateur à partir d'une zone de texte pour les paramètres. J'ai besoin spécifiquement de passer un nom de commande à la méthode basée au large des x du bouton:. Nom propriété

Quelle est la façon la plus simple et la plus efficace de traiter ce problème. Merci à l'avance.

Mise à jour: Je suis en train d'utiliser un convertisseur et c'est la méthode de conversion je suis venu avec:

    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (values != null)
        {
            DataTable tblPermissions = (DataTable)values[0];
            string sFunctionName = values[1].ToString();

            DataRow[] rows = tblPermissions.Select("fun_name = '" + sFunctionName + "'");
            if ((bool)rows[0]["fun_enable"])
                return true;
            else
                return false;
        }

        return string.Empty;
    }

Ce qui suit est le XAML:

                    <Button.IsEnabled>
                        <MultiBinding Converter="{StaticResource IsFunctionEnabledConverter}">
                            <Binding ElementName="{StaticResource PermissionsTable}" />
                            <Binding ElementName="btnSave" Path="Name" />
                        </MultiBinding>
                    </Button.IsEnabled>
Était-ce utile?

La solution

Vous pouvez écrire un IValueConverter pour faire l'appel de méthode et de passer dans le contrôle lui-même en utilisant {Binding RelativeSource={RelativeSource Self}, Converter={StaticResource MyConverter}}. Dans la méthode Convert vous pouvez alors la valeur lancer pour contrôler et accéder à la propriété Nom du contrôle pour passer à la méthode de sécurité. En cochant la targetType vous pouvez déterminer si la sortie une valeur booléenne (pour IsEnabled) ou Visibilité ENUM.

*** UPDATE

Je suppose que la ressource « PermissionTable » utilisé avec votre convertisseur de liaison est en fait le DataTable, mais vous essayez de l'utiliser comme une chaîne pour identifier un élément par son nom comme la source de liaison. Essayez d'utiliser Source="{StaticResource PermissionsTable}" au lieu de passer la ressource DataTable lui-même.

Autres conseils

Il peut y avoir différentes façons d'aborder ce problème en fonction de la façon dont vous avez architecturé votre application. Si vous utilisez des vues de contrôle de l'utilisateur et en fonction de code derrière votre itinéraire le plus facile peut être d'appeler les méthodes d'un objet de sécurité directement à partir du code sous-jacent et les propriétés situé directement sur la question des contrôles en.

Si vous utilisez MVVM ou vous êtes tout simplement pas un fan de code-behind, une autre façon de contourner ce problème peut être à fossé en utilisant le nom du bouton et aller avec un propriété jointe. Les propriétés attachées sont une façon d'utiliser le cadre de la propriété de dépendance WPF pour stocker des données sur un objet ou un contrôle que l'objet ou le contrôle n'a pas à l'origine se déclarer.

En plus de propriétés attachées est un concept appelé les comportements attachés. Essentiellement, lorsque vous créez une propriété attachée, vous avez donné un crochet pour un rappel qui est appelée chaque fois que la propriété est définie sur un objet. Lorsque ce rappel est appelée, vous recevez l'objet de la propriété a été mis sur ainsi que des valeurs nouvelles et anciennes de la propriété.

Vous pouvez utiliser la fonction de rappel comme une occasion de vérifier la valeur de la propriété contre votre objet de sécurité et définissez les propriétés activées et visibles comme bon vous semble.

- HTH Dusty

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top