Titre de la fenêtre de liaison WPF à la propriété ViewModel

J’essaie de lier un titre de fenêtre au ViewModel qui a une propriété Title. Voici le XAML MainWindow:

    ...  

Lorsque j’essaie de l’exécuter, j’obtiens l’exception suivante “Fournir une valeur sur ‘System.Windows.StaticResourceExtension’ a généré une exception. Le numéro de ligne et la position pointent sur la propriété DataContext et les états d’exception internes” Impossible de trouver la ressource nommée mainWindowViewModel.

Vous trouverez ci-dessous le code du modèle de vue:

 namespace MyProject.ViewModel { public class MainWindow : INotifyPropertyChanged { #region Fields private const ssortingng TitlebarPrefixSsortingng = "My Project"; private ssortingng title = TitlebarPrefixSsortingng; public ssortingng Title { get { return this.title; } // End getter set { this.title = value; OnPropertyChanged("Title"); } // End setter } // End property protected virtual void OnPropertyChanged(ssortingng propertyName) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(propertyName)); } // End if } // End method public event PropertyChangedEventHandler PropertyChanged; } // End class } // End namespace 

Ma théorie est que les ressources sont chargées après la tentative de lier le titre à la propriété. Lorsque l’exception est levée, la propriété Ressources de la fenêtre est vide.

Est-ce la seule solution pour définir le DataContext dans le code derrière? Je peux faire en sorte que cela fonctionne, mais je préférerais le conserver en XAML.

Vous pouvez essayer de définir le DataContext utilisant la syntaxe de l’élément property:

        

Cela devrait fonctionner car l’parsingur xaml exécutera StaticResourceExtension après la StaticResourceExtension du dictionnaire de ressources.

Mais je pense que peut-être encore mieux serait de définir le DataContext directement, sans le déclarer en tant que ressource:

     

Un peu tard mais une solution simple et parfaite que j’utilise au cas où les gens chercheraient encore des possibilités:

    

Il suffit simplement d’append une propriété à votre MainViewModel qui est le DataContext de MainView comme ceci:

 public ssortingng ApplicationTitle { get { var text = "Application Name"; if (!ssortingng.IsNullOrEmpty(_currentFileLoaded)) { text += $" ({_currentFileLoaded})"; } return text; } } 

J’espère que ça aide..