property español data bindings wpf data-binding window

español - WPF: título de la ventana de enlace de datos para ver la propiedad del modelo



wpf datacontext (1)

Estoy intentando vincular el título de mi ventana a una propiedad en mi modelo de vista, así:

Title="{Binding WindowTitle}"

La propiedad se ve así:

/// <summary> /// The window title (based on profile name) /// </summary> public string WindowTitle { get { return CurrentProfileName + " - Backup"; } }

La propiedad CurrentProfileName se deriva de otra propiedad (CurrentProfilePath) que se establece cada vez que alguien abre o guarda el perfil. En el arranque inicial, el título de la ventana se establece correctamente, pero cuando la propiedad CurrentProfilePath cambia, el cambio no aparece en el título de la ventana como esperaba.

No creo que pueda usar una propiedad de dependencia porque la propiedad es derivada. La propiedad base de la que se deriva es una propiedad de dependencia, pero eso no parece tener ningún efecto.

¿Cómo puedo hacer que el título del formulario se actualice automáticamente en función de esta propiedad?


Eso es porque WPF no tiene forma de saber que WindowTitle depende de CurrentProfileName . Su clase necesita implementar INotifyPropertyChanged , y cuando cambia el valor de CurrentProfileName , necesita generar el evento PropertyChanged para CurrentProfileName y WindowTitle

private string _currentProfileName; public string CurrentProfileName { get { return __currentProfileName; } set { _currentProfileName = value; OnPropertyChanged("CurrentProfileName"); OnPropertyChanged("WindowTitle"); } }

ACTUALIZAR

Aquí hay una implementación típica de INotifyPropertyChanged :

public class MyClass : INotifyPropertyChanged { // The event declared in the interface public event PropertyChangedEventHandler PropertyChanged; // Helper method to raise the event protected virtual void OnPropertyChanged(string propertyName) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName); } ... }