2009-08-07 5 views
1

Je n'ai pas beaucoup utilisé WPF alors la solution est probablement assez simple.WPF Binding Help

Dans l'idée que je développe, il y aura plusieurs commandes (éditeur de texte) chacune étant hébergée dans un onglet, un peu comme le fait VS pour chaque fichier source. Lorsque l'utilisateur clique sur new, l'hôte crée une nouvelle EditorWindow (un usercontrol), crée un nouvel onglet et dit à l'onglet d'afficher la EditorWindow qu'il a créée, puis met à jour une propriété appelée currentWindow (de type EditorWindow) avec celle qui est actuellement actif. InsideWindow est l'éditeur de texte dont le nom est textEditor (également une propriété). Ce que je suis en train de faire est de prendre ce code de la source de démarrage rapide du contrôle de l'éditeur de texte que je utilise

    <StackPanel> 
         <CheckBox Checked="EditiorOptionsChecked" IsChecked="{Binding ElementName=Control, Path=currentWindow.textEditor.IsIndicatorMarginVisible}" Content="Indicator margin visible" /> 
         <CheckBox Checked="EditiorOptionsChecked" IsChecked="{Binding ElementName=Control, Path=currentWindow.textEditor.IsLineNumberMarginVisible}" Content="Line number margin visible" /> 
         <CheckBox Checked="EditiorOptionsChecked" IsChecked="{Binding ElementName=Control, Path=currentWindow.textEditor.IsRulerMarginVisible}" Content="Ruler margin visible (useful for fixed-width fonts only)" /> 
         <CheckBox Checked="EditiorOptionsChecked" IsChecked="{Binding ElementName=Control, Path=currentWindow.textEditor.IsSelectionMarginVisible}" Content="Selection margin visible" /> 
        </StackPanel> 

mis que l'hôte contrôle XAML, et lier les cases à cocher à l'éditeur de syntaxe. J'ai essayé plusieurs choses en vain. Le contrôle est le nom de la fenêtre qui héberge tous les onglets, et le chemin est évidemment censé être la propriété que les cases à cocher sont liées. Je suis certain que le problème est que lors de l'exécution initiale, currentWindow n'est pas initialisé, donc mes liaisons ne sont jamais mises à jour, mais je ne sais pas comment résoudre ce problème. Merci!

Répondre

1

Étant donné que vous êtes nouveau dans WPF, vous ne savez peut-être pas que les propriétés doivent implémenter des notifications de modification pour que les liaisons fonctionnent. Par exemple, si l'une des propriétés du chemin "currentWindow.textEditor.IsIndicatorMarginVisible" est modifiée, vous devez informer le moteur de liaison qu'il a été modifié. Si vous implémentez ces propriétés en tant que DependencyPropertys, le suivi des modifications est gratuit. Sinon, vous devez implémenter INotifyPropertyChanged.

0

J'ai trouvé que l'utilitaire Snoop est le moyen le plus facile de faire un débogage rapide de liaison, vous devriez essayer de l'utiliser et voir s'il vous dit quelque chose d'utile sur les propriétés liées.