2012-02-27 5 views
0

J'essaie actuellement de faire une liaison à l'intérieur d'une grille de données, mais j'ai des problèmes pour atteindre le niveau DataContext de la vue.liaison DataGrid dans DataTemplate

Voici le code:

<DataGridTemplateColumn.CellEditingTemplate> 
<DataTemplate> 
<ComboBox SelectedItem="{Binding Operators}" 
ItemsSource="{Binding DataContext.OperatorList,ElementName=FilterGrid}" /> 
</DataTemplate> 
</DataGridTemplateColumn.CellEditingTemplate> 

Toutes les idées sur ce qui est erroné? Le Viewmodel de View est connecté dans le code derrière.

EDIT: La liaison qui ne fonctionne pas est le ItemsSource liaison ci-dessus

+0

Voir ma réponse ici http://stackoverflow.com/questions/9319662/how-do-i-bind-a-datagridcomboboxcolumn-to-entityframework-using-mvvm/9376563#9376563 – Phil

Répondre

3

Lorsque vous utilisez le DataTemplate du DataGrid, vous ne pouvez pas utiliser ElementName les liaisons car il ne résoudra pas correctement en raison des limitations des capacités de résolution de FindControl dans la hiérarchie de contrôle DataGrid. Vous devez utiliser une liaison RelativeSource qui parcourt l'arborescence de contrôle à la recherche d'un type de contrôle spécifique (que vous devez déterminer - à partir de votre nom d'élément, j'ai supposé que c'était un DataGrid type d'ancêtre).

<DataGridTemplateColumn.CellEditingTemplate> 
    <DataTemplate> 
    <ComboBox 
     SelectedItem="{Binding Operators}" 
     ItemsSource="{Binding DataContext.OperatorList, 
         RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" 
     /> 
    </DataTemplate> 
</DataGridTemplateColumn.CellEditingTemplate> 

Voir this SO post qui partage quelques exemples de code potentiellement liés à l'utilisation MVVM pour accéder au DataContext de l'hôte UserControl pour remplir un ComboBox ItemsSource.

+3

Merci de prendre votre temps et d'expliquer pourquoi mon code n'a pas fonctionné. Votre solution a fait et vous avez été très utile! Merci! – user1145927

Questions connexes