WPF liaison de ne pas mettre à jour la vue
J'ai un textblock:
<TextBlock HorizontalAlignment="Left" Name="StatusText" Margin="0,20" TextWrapping="Wrap" Text="{Binding StatusText}">
... Status ...
</TextBlock>
le code-behind:
public StatusPage()
{
InitializeComponent();
this.DataContext = new StatusPageViewModel(this);
}
et dans le viewModel:
private string _statusText;
///<summary>
///Status text
///</summary>
public string StatusText
{
get { return _statusText; }
set { _statusText = value; }
}
et en fonction dans le viewModel:
string statusText = Status.GetStatusText();
this.StatusText = statusText;
GetStatusText()
renvoie la chaîne "Travaux", etc. Les valeurs de que les fonctions sont affectés à la this.StatusText
mais la propriété text de TextBlock ne changent pas et montre encore réservé "... l'État..."
Je suis au courant de ce genre de questions -->
CLIQUEZ sur<--- mais après avoir lu cela, je ne suis pas encore en mesure de trouver une solution
@Mise à jour
Après vos suggestions, j'ai mis à jour mon code et maintenant j'ai ceci:
public string StatusText
{
get
{
return _statusText;
}
set
{
_statusText = value;
RaisePropertyChanged("StatusText");
}
}
et de la déclaration de viewModel:
public class StatusPageViewModel : ObservableObject, INavigable
où:
ObservableObject classe est:
public abstract class ObservableObject : INotifyPropertyChanged
{
#region INotifyPropertyChanged Members
///<summary>
///Raises the PropertyChange event for the property specified
///</summary>
///<param name="propertyName">Property name to update. Is case-sensitive.</param>
public virtual void RaisePropertyChanged(string propertyName)
{
OnPropertyChanged(propertyName);
}
///<summary>
///Raised when a property on this object has a new value.
///</summary>
public event PropertyChangedEventHandler PropertyChanged;
///<summary>
///Raises this object's PropertyChanged event.
///</summary>
///<param name="propertyName">The property that has a new value.</param>
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
var e = new PropertyChangedEventArgs(propertyName);
handler(this, e);
}
}
#endregion //INotifyPropertyChanged Members
}
Mais sa ne fonctionne toujours pas
Est votre problème a été résolu?
oui
Alors, quelle est la solution? Je suis confrontée au même problème. INotifyPropertyChanged est mis en œuvre, le Mode de 1way/2ways ne fait aucune différence.
oui
Alors, quelle est la solution? Je suis confrontée au même problème. INotifyPropertyChanged est mis en œuvre, le Mode de 1way/2ways ne fait aucune différence.
OriginalL'auteur szpic | 2014-08-27
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour mettre en œuvre
INotifyPropertyChanged
dans votre ViewModel, afin d'aviser le point de Vue que la propriété a changé.Voici un lien vers la page MSDN: Système.ComponentModel.INotifyPropertyChanged
La chose la plus importante à noter est que vous devez soulever la
PropertyChanged
événement dans votre propriété setter.Essayez de régler votre
Binding.Mode
propriétéOneWay
- il se peut que l'INTERFACE utilisateur n'est pas à l'écoute pour la mise à jour.OriginalL'auteur toadflakz
Ajouter le mode de liaison bidirectionnelle, parce que, par défaut de Textblock mode de liaison est une façon
et aussi, bien sûr, vous avez besoin pour mettre en œuvre INotifyPropertyChanged de l'objectif, reportez-vous à ce lien pour savoir comment mettre en œuvre.
OriginalL'auteur Mayur Dhingra
Votre point de vue les besoins de modèle pour mettre en œuvre
INotifyPropertyChanged
, et vous avez besoin de la soulever à chaque fois que l'un de vos changements de propriété (c'est à dire dans le setter).Sans WPF a aucun moyen de savoir que la propriété a changé.
OriginalL'auteur GazTheDestroyer
Lorsque l'on travaille avec DataModels vous devez être sûr que le modèle est complète, au départ de la charge. Donc, si vous faites cela: ce.DataContext = mainViewModel et certaines parties de vous mainViewModel ne sont PAS chargés (=null) alors vous n'êtes pas en mesure de les lier. Exemple, j'ai un Modèle au sein de ce modèle un objet Programme. - Je lier au Texte d'un TextBlock pour Modèle.Programme.Nom. L'objet du Programme n'est pas connecté au chargement initial de sorte que vous aurez à relier à un objet chargé après parce que sinon, pas de notifications peuvent être envoyées.
OriginalL'auteur Herman Van Der Blom
J'ai eu ce problème et voici ce que je faisais mal...
Remarque: j'ai Eu INotifyPropertyChanged codé correctement.
De mon point de Vue, j'ai eu
...et ce appelle le constructeur de la machine virtuelle (la création d'une instance pour pointer vers /à être lié à).
Dans une autre classe (dans le ViewModel code de mon programme de la Fenêtre Principale) j'ai aussi été l'instanciation de la ViewModel(s), c'est à dire:
Ils ont tous deux hérité d'une super-classe et j'ai été des allers-retours entre les instances montrant les différents points de Vue dans un article de la Fenêtre Principale - selon mon intention.
Que tout ce qui est câblé est une autre question, mais quand j'enlève la problématique xaml (en haut de cette réponse) qui a été précédemment l'instanciation d'un autre état "inutilisé" de l'instance de la ViewModel, la Vue de mise à jour comme par INotifyPropertyChanged mécanismes.
OriginalL'auteur JohnG79