WPF - заголовок окна привязки данных для просмотра свойства модели - PullRequest
5 голосов
/ 02 октября 2009

Я пытаюсь привязать заголовок окна к свойству в моей модели представления, например:

Title="{Binding WindowTitle}"

Свойство выглядит так:

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

Свойство CurrentProfileName является производным от другого свойства (CurrentProfilePath), которое устанавливается всякий раз, когда кто-либо открывает или сохраняет профиль. При первоначальном запуске заголовок окна устанавливается правильно, но когда когда-либо изменяется свойство CurrentProfilePath, это изменение не всплывает до заголовка окна, как ожидалось.

Я не думаю, что смогу использовать здесь свойство зависимости, потому что это производное свойство. Базовое свойство, из которого оно получено, является свойством зависимости, но, похоже, оно не оказывает никакого влияния.

Как я могу сделать самообновление заголовка формы на основе этого свойства?

1 Ответ

9 голосов
/ 02 октября 2009

Это потому, что WPF не может знать, что WindowTitle зависит от CurrentProfileName. Ваш класс должен реализовать INotifyPropertyChanged, и когда вы изменяете значение CurrentProfileName, вам нужно вызвать событие PropertyChanged для CurrentProfileName и WindowTitle

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

UPDATE

Вот типичная реализация 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);
    }

    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...