2010-11-18 8 views
1

Le composant principal de mon application est un onglet qui contient N nombre de vues et le datacontext de ces vues est un objet ViewModel distinct. J'ai une barre d'état au bas de l'application et il contient quelques zones de texte. Je souhaite que l'une des zones de texte reflète un horodatage pour l'onglet actuellement sélectionné. L'horodatage est une propriété de l'objet ViewModel défini en tant que datacontext de la vue.Accès aux propriétés WPF et ViewModel

Je suis un newb WPF et je ne sais pas vraiment comment lier cette propriété à la barre d'état.

Répondre

3

Assurez-vous que votre ViewModel implémente INotifyPropertyChanged.

Par exemple ...

/// <summary> 
/// Sample ViewModel. 
/// </summary> 
public class ViewModel : INotifyPropertyChanged 
{ 
    #region Public Properties 

    /// <summary> 
    /// Timestamp property 
    /// </summary> 
    public DateTime Timestamp 
    { 
     get 
     { 
      return this._Timestamp; 
     } 
     set 
     { 
      if (value != this._Timestamp) 
      { 
       this._Timestamp = value; 

       // NOTE: This is where the ProperyChanged event will get raised 
       //  which will result in the UI automatically refreshing itself. 
       OnPropertyChanged("Timestamp"); 
      } 
     } 
    } 

    #endregion 


    #region INotifyPropertyChanged Members 

    /// <summary> 
    /// Event 
    /// </summary> 
    public event PropertyChangedEventHandler PropertyChanged; 

    /// <summary> 
    /// Raise the PropertyChanged event. 
    /// </summary> 
    protected void OnPropertyChanged(string propertyName) 
    { 
     if (this.PropertyChanged != null) 
     { 
      this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    #endregion 


    #region Private Fields 

    private DateTime _Timestamp; 

    #endregion 
} 
+0

Fonctionne très bien, merci! – jlafay

1

Quelque chose comme:

<TextBox Text="{Binding ElementName=tabControl, Path=SelectedItem.DataContext.Timestamp}" /> 

Un peu selon le cas est lié aux données ou non la ItemsSource de votre tabcontrol.

+0

En utilisant SelectedContent.DataContext.Timestamp un peu travaillé. Il ne se met pas à jour sauf si je sélectionne un autre onglet et que je sélectionne à nouveau cet onglet. Que puis-je faire pour mettre à jour le bloc de texte lorsque cette propriété change? – jlafay

+0

Tous vos ViewModels implémentent-ils INotifyPropertyChanged? – ChrisNel52

+0

@Chris, non, ils ne le font pas. Je n'étais pas au courant de cette interface, je suis nouveau à WPF :) On dirait que j'ai plus de lecture à faire. – jlafay