Question

J'ai une application après le schéma MVVM. Où j'ai plusieurs visites et mots de vue. Sur mon empiècement, j'ai un textblock que je voudrais mettre à jour avec des informations provenant des éléments choisis.

Lors du démarrage de l'application, j'insère une valeur dans le MainviewModel pour tester la liaison afin que tout fonctionne ici. Où le code est le suivant:

<TextBlock Text="{Binding colorOfElement}" Grid.Row="1"/>

code dans MainviewModel

 private string _colorOfElement;
    public string colorOfElement
    { 
        get
        {
            return _colorOfElement;
        }
        set
        {
            _colorOfElement = value;

            NotifyPropertyChanged("colorOfElement");

        }
    }

......

colorOfElement = "Test";

Ceci est affiché correctement. Lorsqu'un utilisateur interagit ensuite avec un élément, un événement est tiré à l'intérieur de la nouvelle viewModel, ici, j'ai une référence au MainviewModel afin que je puisse facilement mettre à jour le colorofelement de chaîne.

private MainViewModel mv;
......
    public void MouseDown(ManipulationStartedEventArgs obj)
    {
        FrameworkElement MovingElement = (FrameworkElement)obj.OriginalSource;

        Canvas canvas = FindParentOfType<Canvas>(MovingGear);

        obj.ManipulationContainer = canvas;
        obj.Handled = true;

        testViewModel viewModel = (testViewModel)MovingElement.DataContext;

        mv.colorOfElement = viewModel.model.Color;
    }

Lorsque cette fonction s'exécute, je suis envoyé dans le MainviewModel et notifyproperTychanged est tiré. Mais sur l'application.Page indique la vue, je ne peux voir aucune mise à jour de la variable, mais dans le code, les modifications variables. Toute idée de ce problème de liaison?

réponse Comme j'avais testé le DataContext et que tout fonctionnait, le problème était de ma classe publique.

     public class MainViewModel : ViewModelBase

Ici, il devrait inclure l'interface inotifypropertychanged pour activer la fonctionnalité. Donc, la solution simple consiste à ajouter cela et à obtenir:

     public class MainViewModel : ViewModelBase, INotifyPropertyChanged

Alors vous êtes prêt à partir :)

Était-ce utile?

La solution

Assurez-vous que:

  • DataContext est défini sur la bonne instance du MainviewModel
  • Le MainviewModel implémente l'interface InotifyProperTychanged
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top