2009-11-19 3 views
0

J'utilise un TreeView dans un contrôle Combobox (à partir de here). J'ai un objet ViewModel qui est le DataContext de ma fenêtre. Ce que j'aimerais voir se produire lorsque l'élément sélectionné dans l'arborescence/la liste modifiable change, je souhaite qu'une propriété de mon ViewModel soit mise à jour avec cet élément sélectionné. Idéalement, j'aimerais pouvoir le faire complètement dans xaml, mais je n'arrive pas à comprendre comment le faire. Le contrôle a une propriété de dépendance "SelectedTreeViewItem" donc je veux fondamentalement lier cette propriété à une propriété de dépendance sur mon objet ViewModel, mais je ne sais pas exactement ce que j'ai besoin de faire (Trigger? EventTrigger?). La liaison doit uniquement être unilatérale car je veux juste que la propriété de mon modèle de vue reflète ce qui est actuellement sélectionné dans le contrôle; Je n'ai pas besoin de modifier l'élément sélectionné dans la commande depuis mon modèle de vue. Je suis encore assez nouveau à WPF.Mettre à jour la propriété sur le modèle de vue sans code derrière?

Voici le code pour mon contrôle essayant de lier la propriété SelectedTreeViewItem à une propriété sur mon modèle de vue. Cela ne fonctionne pas, la propriété sur mon modèle de vue est toujours nulle.

<local:TreeViewCombo 
     x:Name="encounterCodeSelector" 
     ItemsSource="{Binding Path=EncounterCodes}" 
     ItemTemplate="{StaticResource EncounterCodesTemplate}"    
     Style="{StaticResource TreeViewInComboBox}" 
     SelectedTreeViewItem="{Binding Path=SelectedEncounterCode, Mode=OneWay}" 
     Canvas.Left="171" Canvas.Top="377" Width="456"> 
    </local:TreeViewCombo> 

Edit:

Changement du mode de "Sens unique" à "OneWayToSource" a travaillé. Il suffit de lier le SelectedTreeViewItem à la propriété de votre ViewModel, en utilisant BindingMode=OneWay

Répondre

0

Une liaison standard devrait fonctionner correctement pour cela.

+0

Qu'est-ce qu'une "reliure standard"? L'étiquette ? J'ai essayé cela et vsnet se plaint donc soit je le mets au mauvais endroit ou je l'utilise mal. – Joe

0

Le passage du mode "OneWay" à "OneWayToSource" a fonctionné.

<local:TreeViewCombo 
     x:Name="encounterCodeSelector" 
     ItemsSource="{Binding Path=EncounterCodes}" 
     ItemTemplate="{StaticResource EncounterCodesTemplate}"    
     Style="{StaticResource TreeViewInComboBox}" 
     SelectedTreeViewItem="{Binding Path=SelectedEncounterCode, Mode=OneWayToSource}" 
     Canvas.Left="171" Canvas.Top="377" Width="456"> 
    </local:TreeViewCombo> 
Questions connexes