MVVM Mise à jour de l'élément de vue
-
20-12-2019 - |
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?
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 :)
La solution
Assurez-vous que:
- DataContext est défini sur la bonne instance du MainviewModel
- Le MainviewModel implémente l'interface InotifyProperTychanged