0
votes

La liaison isenableable ne fonctionne pas

im essayant de modifier l'état de l'état de toutes les affichages de la commande de la barre d'outils. Je peux changer certaines chaînes avec elle, mais pas le statut d'activation.

Ceci est mon point de vue que je voulais désactiver ou l'activer. P>

    ...(in ctor)
       ToolBarText = "Edit";
       Editable = false;
       ToolbarCommand = new Command(ToolbarEditAndSave);
    ...
private void ToolbarEditAndSave()
        {
            if (ToolBarText == "Edit")
            {
                Editable = true;
                ToolBarText = "Save";
            }
            else if (ToolBarText == "Save")
            {
                //Save

                ToolBarText = "Edit";
                Editable = false;
            }
        }

        string toolBarText;
        public string ToolBarText
        {
            get { return toolBarText; }
            set
            {
                if (toolBarText != value)
                {
                    toolBarText = value;
                    OnPropertyChanged();
                }
            }
        }
        bool editable;
        public bool Editable
        {
            get { return editable; }
            set
            {
                if (editable != value)
                {
                    editable = value;
                    OnPropertyChanged();
                }
            }
        }


1 commentaires

Essayez ceci: . Changez simplement l'ordre dans lequel les propriétés sont définies.


3 Réponses :


0
votes

J'ai créé une simple démonstration pour simuler votre code, le code principal est comme suit:

userDatamodel.cs xxx

xaml xxx

L'effet est le suivant:

Entrez la description de l'image ici

Remarque:

  1. La façon dont vous avez comparé la valeur de la chaîne n'est pas correcte. Il devrait ressembler à ceci

    si (ToolbarText.equals ("Modifier")) Non Si (ToolBarText == "Modifier")

  2. commande doit avoir besoin d'un événement pour déclencher.


3 commentaires

Merci de répondre. Mais ce n'est pas une grosse différence entre mon code. Je viens de trouver mon vrai problème est une liaison à la liaison et de liaison à la même visualisation. Si je supprimais le contexte de la liaison, cela fonctionne bien. Mais je dois les utiliser ensemble et séparer. Parce que ces vals de liaison sur différentes couches sur ma page.


Pourriez-vous s'il vous plaît poster plus de détails sur votre question?


Ouais, bien sûr. Son analyse fondamentale essayant de lier 2 données différentes à un même objet. un pour BindingContext One pour une assouplie. Mais BindingContext bloquer une liaison assortie. Dans votre exemple, pouvez-vous essayer d'utiliser le contexte de liaison et la liaison à la même heure?



0
votes

rajesh dans les commentaires a raison. Malheureusement, cela a à voir avec l'ordre des propriétés. Ce qui se passe est la suivante: le isenabled est appliqué, mais la commande est attribuée.

La commande a une propriété canexecute qui influencera également si une commande est activée ou non. Si aucune logique n'est attribuée au canexecute , il retournera toujours vrai.

Dans ce cas, si vous définissez isenabled = "false" mais attribuez la commande, il définira soudainement isenabled à nouveau. Il y a Un problème sur le référentiel xamarin.Forms pour cela, mais la fixant aura un impact important.

Pour l'instant, vous pouvez rechercher dans la commande ou implémenter la logique de la commande pour déterminer la bonne valeur pour Canexecute


1 commentaires

Merci de répondre. Mais ce n'est pas une grosse différence entre mon code. Je viens de trouver mon vrai problème est une liaison à la liaison et de liaison à la même visualisation. Si je supprimais le contexte de la liaison, cela fonctionne bien. Mais je dois les utiliser ensemble et séparer. Parce que ces vals de liaison sur différentes couches sur ma page



0
votes

Je viens de le comprendre. J'ai également ajouté des propres éditables à mes sous-modèles aussi, puis les définissez alors lorsque vous modifiez le changement nécessaire.

 private void ToolbarEditAndSave()
    {
        if (ToolBarText.Equals("Edit"))
        {
            Editable = true;
            ToolBarText = "Save";
        }
        else if (ToolBarText.Equals("Save"))
        {
            //Save

            ToolBarText = "Edit";
            Editable = false;
        }

        ProfileContainer.UserDataModel.Editable = Editable;
        if (ProfileContainer.Dog1ProfileViewModel != null)
            ProfileContainer.Dog1ProfileViewModel.Editable = Editable;
        if (ProfileContainer.Dog2ProfileViewModel != null)
            ProfileContainer.Dog2ProfileViewModel.Editable = Editable;
    }


0 commentaires