2009-10-02 13 views
5

を表示するウィンドウタイトルを結合:WPF - データがそうのように、私は、私の見解モデルのプロパティに私のウィンドウタイトルをバインドしようとしているモデルプロパティ

Title="{Binding WindowTitle}" 

プロパティは次のようになります。

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

CurrentProfileNameプロパティは、誰かがプロファイルを開いたり保存したりするたびに設定される別のプロパティ(CurrentProfilePath)から派生しています。最初の起動時には、ウィンドウのタイトルは正しく設定されていますが、CurrentProfilePathプロパティが変更されると、期待通りに変更がウィンドウタイトルにバブルアップしません。

プロパティが派生プロパティであるため、ここで依存プロパティを使用することはできません。それが派生した基本プロパティは依存関係プロパティですが、それは何の効果もないようです。

フォームのタイトルをこのプロパティに基づいて自動更新するにはどうすればよいですか?

答えて

9

WPFはWindowTitleCurrentProfileNameに依存していることを知る方法がないためです。あなたのクラスはINotifyPropertyChangedを実装する必要があり、あなたがCurrentProfileNameの値を変更するとき、あなたはここでINotifyPropertyChangedの典型的な実装だCurrentProfileNameWindowTitle

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

UPDATE

ためPropertyChangedイベントを発生させる必要があります:

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); 
    } 

    ... 
} 
+0

ビンゴ。それがそれでした。二次質問 - 既存のOnPropertyChangedメソッドはDependencyPropertyオブジェクトのみを受け入れました。実際のPropertyChangedイベントとカスタムOnPropertyChangedメソッドをクラスに追加するのが本当に必要なのでしょうか? – Chris

+0

はい、イベントを宣言する必要があります。既存の 'OnPropertyChanged'メソッドは' DependencyObject'から継承されており、それは依存性プロパティーのためだけです。 –

+0

コードサンプルの更新された回答を参照 –

関連する問題