J'ai un TreeView auquel j'associe un ContextMenu. Ce menu contextuel a un élément dont la propriété IsChecked que je veux lier à mon ViewModel. Comme j'utilise un arbre, chaque arbre est lié à une sous-propriété de mon ViewModel.WPF Treeview contextmenu Liaison IsChecked MVVM
Dans la fenêtre de sortie de VS2010 je vois cette erreur de liaison de données:
erreur de chemin de BindingExpression: 'IsAutoStart' propriété introuvable sur 'objet' '' HostMgmtViewModel '(HashCode = 12565727). BindingExpression: Path = IsAutoStart; DataItem = 'HostMgmtViewModel'
Cela montre clairement qu'il essaie de se lier à mon ViewModel et non aux données associées de l'arbre. Comment me lier à l'objet correct? Souvenez-vous que mon menu contextuel est associé à TreeView entier et non à l'arbre spécifique.
---------- Modifier
Comme xandy a souligné ci-dessous la résolution de mon problème était de lier la IsChecked comme ceci:
{Binding Path=PlacementTarget.SelectedItem.IsDisabledStart, Mode=OneWay, RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}}
Et cette liaison va dans le ContextMenu? Lorsque j'essaie que j'obtiens cette erreur: Une 'liaison' ne peut pas être utilisée dans une collection 'ItemCollection'. Une 'liaison' ne peut être définie que sur un DependencyProperty d'un DependencyObject. – BrettRobi
BTW, Ma réponse précédente est supposée faire comme l'exemple de bloc de texte ci-dessus, mais appliquer sur l'en-tête de menuitem. Aucune erreur n'est rencontrée avec le menuitem mais cela ne fonctionne pas. Vous obtenez une erreur DependencyObject ... car vous liez la source de données, mais pas la propriété. – xandy
Merci xandy, votre échantillon m'a donné la bonne réponse. J'ai fini par lier l'élément de menu IsChecked à ceci: {Binding Path = PlacementTarget.SelectedItem.IsAutoStart, Mode = OneWay, RelativeSource = {RelativeSource AncestorType = {x: Type ContextMenu}}} – BrettRobi