2016-07-27 1 views
-1

Mise à jour en bas. Je pense que mon erreur est très simple, mais je ne sais pas quoi essayer d'autre.La liaison simple ne fonctionne pas/ne fonctionne pas C# wpf

J'ai View qui a un TextBlock.

<TextBlock x:Name="aCalories" 
      Text="{Binding Path= aCalories, UpdateSourceTrigger=PropertyChanged}" 
      Grid.Row="5" 
      Grid.Column="3" VerticalAlignment="Center" 
      Foreground="#2d3b53" 
      HorizontalAlignment="Center"/> 

Après avoir fait quelques trucs, comme l'ajout de calories des différents articles « aColories » devrait mettre à jour après que les modifications ont été apportées. Mais "aColories" reste 0. Merci aux points d'arrêt, je vois que "_acalories" obtient des valeurs, mais il semble qu'ils ne sont pas transmis à ma vue.

aClories dans mon ViewModel:

namespace FoodsLib.ViewModel 

{ 
    public class ViewModelTagesBedarfWindow : ViewModelBase, INotifyPropertyChanged 
    { 

    public ViewModelTagesBedarfWindow(Repository repository, ModelPersone logedPers) : base(repository) 
    { 
     LoginPerson = logedPers; 
    } 

private double _acalories; 
public double aCalories 
{ 
    get 
    { 
     return _acalories; 
    } 
    set 
    { 
     if (_acalories != value) 
     { 
      _acalories = value; 
      OnPropertyChanged("aCalories"); 
     } 
    } 

// my OnPropertyChanged 
public event PropertyChangedEventHandler PropertyChanged; 

protected void OnPropertyChanged(string name) 
{ 
    PropertyChangedEventHandler handler = PropertyChanged; 
    if (handler != null) 
    { 
     handler(this, new PropertyChangedEventArgs(name)); 
    } 
} 
} 

Et mes .xaml.cs

public ViewModelTagesBedarfWindow MyViewModel { get; set; } 
//ViewModelFrdg _viewModel; 
public TagesBedarfWindow(ModelPersone logedPerson) 
{ 
    InitializeComponent(); 

    MyViewModel = new ViewModelTagesBedarfWindow(new Repository(), logedPerson); 
    this.DataContext = MyViewModel; 

    logedPers = logedPerson; 

} 

Je voudrais être en mesure d'obtenir des valeurs et que les valeurs changent automatiquement.

Par exemple: Un autre "TextBlock" Lie à cela et (semi) fonctionne.
Mais cela ne se met pas non plus à jour après une modification.

public double aSatFat 
    { 
     get 
     { 
      return LoginPerson.RDASatFat; 
     } 
     set 
     { 
      _asatFat = LoginPerson.RDASatFat; 
      OnPropertyChanged("aSatFat"); 

     } 
    } 

Il semble que ce soit aussi simple que je pensais. La liaison était correcte et mon DataContext a été réglé correctement, mais avec de nombreux modèles, j'ai confondu 2 "calories" différentes de deux modèles différents. Un nommé: "_acalories" l'autre "RDACalories".

Je comprends le downvote, parce que mon erreur est simple et personne ne bénéficie de la réponse.

+0

Avez-vous des erreurs de liaison dans la fenêtre de sortie? – mariocatch

+1

Avez-vous implémenté 'INotifyPropertyChanged' dans votre classe' ViewModel' – Jace

+0

Aucune erreur de liaison pour ce problème, malheureusement. Modifier: Oui est implémenté. –

Répondre

0

Votre liaison semble être correcte et le code est parfait aussi. La question semble être avec ce code:

MyViewModel = new ViewModelTagesBedarfWindow(new Repository(), logedPerson); 
this.DataContext = MyViewModel; 

DataContext n'est pas défini. Placez un point d'arrêt à cette position et vérifiez si le paramètre dataContext est défini correctement.

public TagesBedarfWindow(ModelPersone logedPerson) 

Vous avez également besoin d'un constructeur par défaut, c'est-à-dire un constructeur qui ne prend aucun paramètre. Donc le constructeur ci-dessus ne va pas fonctionner.

+0

Merci pour votre suggestion, mais il semble que cela fonctionne bien sans un constructeur par défaut (en quelque sorte). L'erreur était simple. –

+0

Quelle était l'erreur? – ViVi

+0

J'ai confondu deux propriétés (à la fois pour "calories") de deux modèles différents. J'ai donné une valeur à la propriété et j'ai essayé d'afficher une autre propriété qui n'a jamais eu de valeur. J'étais un peu fatigué à 4h du matin ... –