2010-11-18 10 views
1

Die Hauptkomponente meiner Anwendung ist ein Registersteuerelement, das eine Anzahl von N Ansichten enthält, und der Datenkontext dieser Ansichten ist ein separates ViewModel-Objekt. Ich habe eine Statusleiste am unteren Rand der App und es enthält ein paar Textfelder. Ich möchte, dass einer der Textfelder einen Zeitstempel für die aktuell ausgewählte Registerkarte enthält. Der Zeitstempel ist eine Eigenschaft des ViewModel-Objekts, das als Datenkontext der Ansicht festgelegt ist.Zugriff auf WPF- und ViewModel-Eigenschaften

Ich bin ein WPF newb und nicht wirklich sicher, wie diese Eigenschaft an die Statusleiste gebunden wird.

Antwort

3

Stellen Sie sicher, dass Ihr ViewModel INotifyPropertyChanged implementiert.

Zum Beispiel ...

/// <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

Funktioniert gut, danke! – jlafay

1

Etwas wie:

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

Etwas je nachdem, ob Ihr tabcontrol der Itemssource Databound ist oder nicht.

+0

SelectedContent.DataContext.Timestamp Mit gearbeitet etwas. Es wird nicht aktualisiert, es sei denn, ich wähle eine andere Registerkarte und wähle diese Registerkarte erneut aus. Was kann ich tun, um den Textblock zu aktualisieren, wenn sich diese Eigenschaft ändert? – jlafay

+0

Implementieren alle ViewModels INotifyPropertyChanged? – ChrisNel52

+0

@Chris, nein, sie nicht. Ich war mir dieser Schnittstelle nicht bewusst, ich bin neu bei WPF :) Sieht so aus, als hätte ich noch etwas mehr zu lesen. – jlafay

Verwandte Themen