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(); } } }
3 Réponses :
J'ai créé une simple démonstration pour simuler votre code, le code principal est comme suit:
userDatamodel.cs p> xaml p> L'effet est le suivant: p> Remarque: P> La façon dont vous avez comparé la valeur de la chaîne n'est pas correcte. Il devrait ressembler à ceci p>
commande doit avoir besoin d'un événement pour déclencher. p> li>
ol> p>
si (ToolbarText.equals ("Modifier")) Code> Non
Si (ToolBarText == "Modifier") CODE> P> LI>
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?
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 La commande Dans ce cas, si vous définissez Pour l'instant, vous pouvez rechercher dans la commande ou implémenter la logique de la commande pour déterminer la bonne valeur pour isenabled code> est appliqué, mais la commande
code> est attribuée. p>
code> a une propriété
canexecute code> qui influencera également si une commande est activée ou non. Si aucune logique n'est attribuée au
canexecute code>, il retournera toujours vrai. P>
isenabled = "false" code> mais attribuez la commande, il définira soudainement
isenabled code> à nouveau. Il y a Un problème sur le référentiel xamarin.Forms pour cela, mais la fixant aura un impact important. P>
Canexecute code> p>
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
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; }
Essayez ceci: vues: userprofileView> code>. Changez simplement l'ordre dans lequel les propriétés sont définies.