-1
votes

Valeur d'entrée mise à jour en VM mais pas dans UI - Formulaires Xamarin

Dans mon VM, je assure la valeur à CurrentIm.SecondValue Lorsque la bascule est vérifiée, il obtient la valeur saisie dans la saisie de FirstValue, mais la valeur ne se met pas mise à jour dans UI, à moins que je vous rafraîchis / naviguez entre les pages. Quand je le débogé, je vois que CurrentIm.SecondValue est mis à jour dans VM. Toute suggestion comment elle peut être corrigée?
XAML:

private Boolean _secondValueIsFirstValue= false;

    public Boolean SecondValueIsFirstValue
    {
        get { return _secondValueIsFirstValue; }
        set
        {                
            if (_secondValueIsFirstValue!= value)
            {
                if (value)
                {
                    CurrentItem.SecondValue = CurrentItem.FirstValue;
                    OnPropertyChanged();
                }                       
              SetProperty(ref _secondValueIsFirstValue, value);                                     
            }               
        }
    }

private ItemDTO _currentItem;
public ItemDTO CurrentItem
        {
            get { return _currentItem;}
            set { SetProperty(ref _currentItem, value); }
        }

 //DTO Class
 public class ItemDTO : INotifyPropertyChanged    
    {
        public event PropertyChangedEventHandler PropertyChanged;                     
        ....
    }


9 commentaires

Nous ne pouvons pas aider à déboguer le code que nous ne pouvons pas voir. S'il vous plaît poster le code concerné


@Jason je veux juste savoir quelle est la bonne façon de le faire. Ajouté mon code.


Le nom de la propriété que vous passez à ShakPropertyChanged n'apparaît pas correspondre au nom de la propriété que vous souhaitez.


@Jason Typo, désolé


Ne pas comprendre ne pas se produire en temps réel.


@ Juniorjiang-msft Mon label était la mise à jour tandis que l'utilisateur saisit la valeur à l'entrée, mais je dois maintenant rafraîchir la page (ou naviguer entre les pages) afin de le voir.


@Ika Okey, label Besoin de lier le texte de l'entrée comme suit. <étiquette BindingContext = "{x: référence myentry}" texte = "{chemin de liaison = texte}" ... />


@Ika Désolé non trouvé de la logique Taht à l'aide de ViewModel. Vous pouvez télécharger un exemple de projet, je vais vérifier.


Avez-vous débogué votre code? Qu'est-ce qui est attaché au gestionnaire d'item_propertychanged et êtes-vous sûr qu'il est allé? Cause Si cela met à jour lors de la navigation de retour, je pense que cela pourrait être un problème de collecte de changements de propriété.


3 Réponses :


-1
votes

Voici quelque chose qui pourrait vous aider, vous pouvez lier les étiquettes de Yaml, il existe différents modes tels que: Owway, Twoway, ... Vous pouvez en trouver plus sur les liaisons de cette URL: https://docs.microsoft.com/en-us / XAMARIN / XAMARIN-FORMES / APP-FORMAMAMAMAMAMAMAMAMAMAMAMATINATIFS / COMMISSION DE DONNÉES / MODE DE COMMUNIATION

Ceci est le début d'une réponse pour l'étiquette: P>

{Binding CurrentItem.Amount,Mode=TwoWay}


0 commentaires

0
votes

Je n'étais pas sûr si vous vouliez que le code exact ou le guidage - si vous souhaitez le code exact pour un problème assez simple qui nécessite une écriture approfondie, ce n'est pas un site où quelqu'un d'autre écrira votre code et la question devrait être fermé.

Assumer ainsi que vous voulez que vous souhaitiez que vous devez essentiellement faire, c'est avoir une liaison à Twoway pour les entrées. Lorsqu'ils sont changés, il activera les configurateurs de votre viewModel. Vous devez activer le calcul du nouveau total, puis utiliser une augmentation de la bienfacée pour rafraîchir la valeur.

Si vous n'avez rien compris de ce qui précède, vous devez passer du temps à lire sur MVVM avant de poser des questions supplémentaires.


2 commentaires

J'ai essayé à deux sens, il ne fonctionne toujours pas. Merci pour votre conseil.


Pour autant que je puisse parler de l'autre réponse, vous avez essayé que sur l'étiquette qui est absurde (rien), il devrait être mis en œuvre à l'entrée. Mais toujours cela ne fera rien, ce n'est qu'une étape. Seulement faire tout ce que tout mentionné ci-dessus fonctionnera, la mise en œuvre partielle n'aidera en aucune manière.



0
votes

Je devais mettre à jour le paquet Foldy Nuget.


0 commentaires